OpenCV 單目攝像頭(python版)
前言

本文主要介紹在OpenCV用使用單目攝像頭,包括:打開單目攝像頭、設置攝像頭參數、拍照、錄制視頻。
環境:編程語言:Python3? ? ? ? 主要依賴庫:OpenCV3.x 或?OpenCV4.x
目錄
1)打開攝像頭
2)設置分辨率
3)細節提升
4)攝像頭拍照
5)錄制視頻
單目攝像頭
1)打開攝像頭
OpenCV有VideoCapture()函數,能用來定義“攝像頭”對象,0表示第一個攝像頭(一般是電腦內置的攝像頭);如果有兩個攝像頭,第二個攝像頭則對應VideoCapture(1)。
在while循環中使用“攝像頭對象”的read()函數一幀一幀地讀取攝像頭畫面數據。
imshow函數是顯示攝像頭的某幀畫面;cv2.waitKey(1)是等待1ms,如果期間檢測到了鍵盤輸入q,則退出while循環。
# -*- coding: utf-8 -*-
import cv2
cap = cv2.VideoCapture(0) # 0表示第一個攝像頭
while(1):
# get a frame
ret, frame = cap.read()
# show a frame
cv2.imshow("capture", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
調用release()釋放攝像頭,調用destroyAllWindows()關閉所有圖像窗口。
2)設置分辨率
有時需要指定攝像頭的分辨率,比如1920*1080;
cap.set(3,1920) 設置幀的寬度為1920。cap.set(4,1080) 設置幀的長度為1080。
# -*- coding: utf-8 -*-
import cv2
cap = cv2.VideoCapture(0)
#先設置分辨率,寬:1920 長:1080
cap.set(3,1920)
cap.set(4,1080)
while(1):
# get a frame
ret, frame = cap.read()
# show a frame
cv2.imshow("capture", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
拓展:當攝像流為 cap,設置參數是cap.set(參數編號,參數);獲取參數值的函數是?cap.get(參數編號)。
3)細節提升
其實在ret, frame = cap.read() 代碼,能通過ret 的值來判斷是否成功讀取到攝像頭的畫面數據,加一個判斷邏輯更嚴謹一些;
成功讀取攝像頭數據時,ret 值返回True;獲取失敗時返回False。
# -*- coding: utf-8 -*-
import cv2
cap = cv2.VideoCapture(0)
#先設置分辨率,寬:1920 長:1080
cap.set(3,1920)
cap.set(4,1080)
while(1):
# get a frame
ret, frame = cap.read()
if ret:
# show a frame
cv2.imshow("capture", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
print("圖像數據獲取失?。。?)
break
cap.release()
cv2.destroyAllWindows()
4)攝像頭拍照
拍照 = 保存圖片,使用 cv2.imwrite 把當前攝像頭的幀 數據寫進去,保存為圖片的形式;如果s鍵按下,則進行圖片保存;
# -*- coding: utf-8 -*-
import cv2
cap = cv2.VideoCapture(0)
#先設置分辨率,寬:1920 長:1080
cap.set(3,1920)
cap.set(4,1080)
# 圖像計數 從1開始
img_count = 1
while(1):
# get a frame
ret, frame = cap.read()
if ret:
# show a frame
cv2.imshow("capture", frame)
# 等待按鍵事件發生 等待1ms
key = cv2.waitKey(1)
if key == ord('q'):
# 如果按鍵為q 代表quit 退出程序
print("程序正常退出..")
break
elif key == ord('s'):
## 如果s鍵按下,則進行圖片保存
# 寫入圖片 并命名圖片為 圖片序號.png
cv2.imwrite("{}.png".format(img_count), frame)
print("保存圖片,名字為 {}.png".format(img_count))
# 圖片編號計數自增1
img_count += 1
else:
print("圖像數據獲取失敗?。?)
break
cap.release()
cv2.destroyAllWindows()
5)錄制視頻
保存圖片使用的是cv2.imwrite(),要保存視頻,需要創建一個VideoWriter對象,需要傳入四個參數。
輸出的文件名,如’output.avi’
編碼方式FourCC碼
幀率FPS
要保存的分辨率大小
# -*- coding: utf-8 -*-
import cv2
cap = cv2.VideoCapture(0)
# 定義編碼方式并創建VideoWriter對象
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
outfile = cv2.VideoWriter('output.avi', fourcc, 25., (640, 480))
while(cap.isOpened()):
ret, frame = cap.read()
if ret:
outfile.write(frame) # 寫入文件
cv2.imshow('frame', frame)
if cv2.waitKey(1) == ord('q'):
break
else:
break
使用cv2.VideoCapture()創建視頻對象,然后在循環中一幀一陣顯示圖像。
參考:https://www.programcreek.com/python/example/85663/cv2.VideoCapture
https://appdividend.com/2020/06/26/python-cv2-videocapture-how-to-load-video-in-python/
OpenCV Python
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。