日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

小白级OpenCV入门

發布時間:2024/9/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小白级OpenCV入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如今科技發展迅速,很多領域都涉及到“計算機視覺”這個細分領域。簡單的說,就是將圖像信息轉化為計算機可以處理的數字信息,從而讓計算機可以看得見,本文就介紹一下純小白的opencv入門技巧。

OpenCV入門

# 安裝: # OpenCV 的安裝依賴 numpy 庫,在安裝之前確保已經安裝好了 numpy 庫。 pip install opencv-python

Python中的opencv安裝僅需一行代碼就搞定了,opencv是C++寫的代碼,python中調用cv2模塊中的方法就可以了。

圖片讀取

準備就緒后,就可以開始學習了,既然是為了讓計算機可以看得見,那么首先介紹一下如何來讀取圖片。需要注意的一點是cv2讀取圖片路徑中,不能包含中文,否則讀取不出來。從網上下載張圖片放在程序同目錄下,開始讀取。

import?cv2dog = cv2.imread('dog.jpg') # 小編比較喜歡小狗# 顯示圖片 cv2.imshow('dog', dog)# 等待鍵盤輸入時中斷,單位是毫秒,如果是0,無限等待 cv2.waitKey(0)# 由于opencv是有C++編寫的,所以程序結束后要釋放一下 cv2.destroyAllWindows()

轉灰度圖

利用 dog.shape 函數可以看到數據形狀,彩色圖片是三維的,在很多操作時數據量大,不便于操作,經常會轉換成灰度圖像。

# 彩色圖片變為黑白 import?cv2 dog = cv2.imread('dog.jpg')# cv2 讀取圖片,顏色通道是BGR # PIL 讀取圖片,顏q色通道是RGBdog_gray = cv2.cvtColor(dog, code=cv2.COLOR_BGR2GRAY) # 轉灰度,可以利用tab鍵進行操作,其中的屬性名都很友好cv2.imshow('gray', dog_gray) cv2.waitKey(0) cv2.destroyAllWindows()

其他常用操作

  • 調整圖片規格

dogg?= cv2.resize(dog, dsize=(298, 368)) # 括號中的寬高尺寸順序與shape輸出是相反的
  • 存儲圖片

cv2.imwrite('./dog_gray.jpg', dog_gray) # 參數一是存儲路徑,參數二是被存儲圖片
  • 鍵盤中斷退出

cv2.imshow('dogg', dogg) while?True:if?ord('q') == cv2.waitKey(9000): # 等3000毫秒,等待鍵盤輸入字符‘q’則退出break cv2.destroyAllWindows() # ord('q')是得到q的ASCII碼

人臉識別

人臉識別,是基于人的臉部特征信息進行身份識別的一種生物識別技術。這就需要訓練數據來識別人臉,不過GitHub上已經有一些訓練好的訓練數據了,可以直接下載。直接GitHub上搜索opencv,找星標?最多的那個,C++編寫的。里面有各種訓練好的數據集,我們這次用到的數據,直接給出鏈接。

https://github.com/opencv/opencv/tree/master/data/haarcascades

import?numpy as?np import?cv2pic = cv2.imread('./nba.jpg')# 人臉數據,級聯分類器,給人臉特征數據,返回可以識別人臉的對象 detector = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')# 轉換成灰度 gray = cv2.cvtColor(pic, code=cv2.COLOR_BGR2GRAY)# 使用訓練好的識別人臉對象來識別人臉區域 face_zone = detector.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3) #?后兩個參數就是默認值,可以修改來調整識別人臉的精確度for?x, y, w, h in?face_zone:# 在人臉上畫一個正方形,畫正方形只需要知道左上角和右下角坐標即可cv2.rectangle(pic, pt1=(x, y), pt2=(x+w, y+h), color=[0, 255, 0], thickness=2)# 在人臉上畫圈,需要圓的圓心坐標和半徑cv2.circle(pic, center=(x+w//2, y+h//2), radius=w//2, color=[0, 0, 255], thickness=2)# 使用灰度圖檢測,繪制在彩色圖片上 cv2.imshow('pic', pic) cv2.waitKey(0) cv2.destroyAllWindows()

是不是很簡單的幾步就實現了,顯然,有些誤差,但是效果已經很明顯了,想要獲得更好的結果可以調整參數,或者自己再訓練數據。

視頻處理

使用opencv來處理視頻之前,首先應該了解視頻是怎么來的。簡單的說視頻就是有很多張圖片構成(這里忽略了音頻,音頻是由二維數據組成,左聲道和右聲道,有機會以后再說)。

中間步驟解析:

# 讀取數據 cap = cv2.VideoCapture('./v1.mp4')# flag和frame接收返回值,flag是個布爾型值,表示是否讀取到幀,frame為當前幀的數據 flag, frame = cap.read()# 獲取視頻對象的幀頻率,可以通過該頻率計算 WaitKey 時間,來調整視頻的快慢 cap.get(propId=cv2.CAP_PROP_FPS) import?numpy as np import?cv2# 參數是0,則調取本地攝像頭 cap?= cv2.VideoCapture(0)w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) + 1?# 寬一點沒問題,小了不行 h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) + 1vidioWriter = cv2.VideoWriter('./po.mp4', cv2.VideoWriter_fourcc('M','P','4','v'), 24, (w, h)) # 要求int型 # cv2.VideoWriter_fourcc('M','P','4','2') avi格式 # cv2.VideoWriter_fourcc('M','P','4','v') mp4格式detector = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')while cap.isOpened():flag, frame = cap.read()gray = cv2.cvtColor(frame, code=cv2.COLOR_BGR2GRAY)face_zone = detector.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5)for?x,y,w,h in face_zone:cv2.circle(frame, center=(x+w//2, y+h//2), radius=w//2, color=[0, 0, 255], thickness=2)vidioWriter.write(frame)# 上面創建了寫視頻對象,僅需把每一幀寫入即可if?flag == False:# 判斷是否還能讀取到幀,取不到則表示視頻結束了,退出循環breakcv2.imshow('pic', frame)if?ord('q') == cv2.waitKey(40):# 沒有鍵入‘q’時,按等待時間展示每一幀,合起來就是個視頻,輸入‘q’時退出breakcv2.destroyAllWindows()cap.release() # 釋放資源 vidioWriter.release()


來和小伙伴們一起向上生長呀!

掃描下方二維碼,添加小詹微信,可領取千元大禮包并申請加入 Python 學習交流群,群內僅供學術交流,日常互動,如果是想發推文、廣告、砍價小程序的敬請繞道!一定記得備注「交流學習」,我會盡快通過好友申請哦!

????長按識別,添加微信

(添加人數較多,請耐心等待)

????長按識別,關注小詹

(掃碼回復 1024 領取程序員大禮包)

總結

以上是生活随笔為你收集整理的小白级OpenCV入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。