Python可以很方便的連接攝像頭,使用opencv庫(kù)可以實(shí)現(xiàn)攝像頭的實(shí)時(shí)監(jiān)控和圖像處理。下面我們來(lái)一步步實(shí)現(xiàn):
#首先導(dǎo)入opencv庫(kù) import cv2 #使用攝像頭的編號(hào)打開(kāi)攝像頭,一般第一個(gè)是0 cap = cv2.VideoCapture(0) #開(kāi)始循環(huán)讀取攝像頭傳來(lái)的圖像 while True: #讀取一幀圖像 ret, frame = cap.read() #如果讀取失敗則退出循環(huán) if not ret: break #在窗口中顯示圖像 cv2.imshow('Camera',frame) #等待1毫秒,如果發(fā)現(xiàn)按下ESC鍵則退出循環(huán) if cv2.waitKey(1) == 27: break #釋放攝像頭 cap.release() #關(guān)閉所有的窗口 cv2.destroyAllWindows()
上面的代碼就是連接攝像頭并實(shí)時(shí)顯示攝像頭畫(huà)面的代碼,使用時(shí)只需要將攝像頭連接到電腦上并運(yùn)行代碼即可。
實(shí)際中,我們可能需要對(duì)圖像進(jìn)行一些處理,例如檢測(cè)圖像中的人臉并做出相應(yīng)的處理。這時(shí),opencv提供了一些現(xiàn)成的算法庫(kù),例如haar級(jí)聯(lián)分類(lèi)器可以用于人臉識(shí)別。下面是一個(gè)簡(jiǎn)單的代碼實(shí)現(xiàn):
#首先導(dǎo)入opencv庫(kù) import cv2 #使用攝像頭的編號(hào)打開(kāi)攝像頭,一般第一個(gè)是0 cap = cv2.VideoCapture(0) #導(dǎo)入人臉?lè)诸?lèi)器 face_casc = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') #開(kāi)始循環(huán)讀取攝像頭傳來(lái)的圖像 while True: #讀取一幀圖像 ret, frame = cap.read() #如果讀取失敗則退出循環(huán) if not ret: break #將圖像轉(zhuǎn)換為灰度圖像 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) #使用人臉?lè)诸?lèi)器檢測(cè)圖像中的人臉 faces = face_casc.detectMultiScale(gray, 1.3, 5) #在圖像中框出人臉 for (x, y, w, h) in faces: cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2) #在窗口中顯示圖像 cv2.imshow('Camera',frame) #等待1毫秒,如果發(fā)現(xiàn)按下ESC鍵則退出循環(huán) if cv2.waitKey(1) == 27: break #釋放攝像頭 cap.release() #關(guān)閉所有的窗口 cv2.destroyAllWindows()
上面的代碼將攝像頭捕獲的圖像轉(zhuǎn)換為灰度圖像,并使用人臉?lè)诸?lèi)器檢測(cè)圖像中的人臉,在圖像中框出人臉。使用這種方法,我們可以實(shí)現(xiàn)各種各樣的圖像處理,例如邊緣檢測(cè)、圖像分割等等。