cv2之调用摄像头

使用CV2调用摄像头

代码

需要先设置”允许应用访问你的相机”,否则报错

1
>[ WARN:0] global C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-ep71p_ws\opencv\modules\videoio\src\cap_msmf.cpp (438) `anonymous-namespace'::SourceReaderCB::~SourceReaderCB terminating async callback
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import cv2

cap = cv2.VideoCapture(0,cv2.CAP_DSHOW) # 0:打开第一个摄像头
while cap.isOpened(): # 摄像头打开为True:
ret, frame = cap.read() # 读取一帧数据,ret为true则成功,frame为读的图像
if not ret:
exit('read video error')
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 彩色转灰度
cv2.namedWindow('camera', cv2.WINDOW_AUTOSIZE) # 窗口自动调节大小
cv2.imshow('camera', frame)
if cv2.waitKey(10) & 0xFF == ord('q'): # 按q退出
break
cap.release() # 释放摄像头q
cv2.destroyAllWindows() # 结束所有窗口

cv2.waitKey(1000) & 0xFF == ord(‘q’) 是什么意思?

  • cv2.waitKey(1000):在1000ms内根据键盘输入返回一个值
  • 0xFF :一个十六进制数FF
  • ord('q') :q的ASCII码

cv2.imshow()后面需要跟着cv2.waitKey(1000) & 0xFF == ord('q')才能正常显示

This function should be followed by cv::waitKey function which displays the image for specified . milliseconds. Otherwise, it won't display the image.

嵌入QT

1
2
3
4
5
ret, frame = cap.read()
show = cv2.resize(frame, (640, 480))
show = cv2.cvtColor(show, cv2.COLOR_BGR2RGB)
Image = QtGui.QImage(show.data, show.shape[1], show.shape[0], QtGui.QImage.Format_RGB888)
self.label.setPixmap(QtGui.QPixmap.fromImage(Image))

用timer计时,每隔一定间隔读取一次cap

1
2
3
4
5
6
7
self.timer = QtCore.QTimer()

# 自定义函数,通过下面这些API调用timer
self.timer.timeout.connect(self.show_camera)
self.timer_camera.isActive()
self.timer_camera.start(30)
self.timer_camera.stop()
不要打赏,只求关注呀QAQ