2022 | 您所在的位置:网站首页 › python打开外置摄像头 › 2022 |
1.固定时间间隔自动截图
import cv2
''' 调用usb摄像头 '''
cap = cv2.VideoCapture(1)
n = 1 # 计数
timeF = 10 # 视频帧计数间隔频率
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) # 视频流中的帧宽
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480) # 视频流中的帧高
# cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter.fourcc("M", "J", "P", "G")) # 返回解码方式中的四字符 # ?1为啥要重设
''' 显示图像 '''
i = 0
while True: # 循环读取视频帧
ret, frame = cap.read()
left_img = frame[:, 0:640, :]
right_img = frame[:, 640:1280, :]
# cv2.imshow("3D camera", frame) #双目相机图像一起输出
# 左右图像一起输出
cv2.imshow('left',left_img)
cv2.imshow('right',right_img)
if (n % timeF == 0):
i +=1
print(i)
cv2.imwrite('D:\\programme\\pictures01\\{}.jpg'.format(i), right_img) # 保存图片
n = n + 1
if cv2.waitKey(1) & 0xFF == ord("q"):
break
''' 关闭 '''
cap.release()
cv2.destroyAllWindows()
VideoCapture(): 有获得照相机的一切权利 参数是0,表示打开笔记本的内置摄像头;要打开外置摄像头参数可以从1开始尝试;参数是视频文件路径,则打开视频.VideoCapture.set(int propertyId, double value) 设置VideoCapture类的属性,设置成功返回ture,失败返回false。 参数:第一个是属性ID,第二个是该属性要设置的值。VideoCapture.read() 按帧读取视频,ret,frame是获cap.read()方法的两个返回值。 ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。 frame就是每一帧的图像,是个三维矩阵。cv2.imwrite 第一个参数是文件名,第二个参数是图片资源。 文件名注意:层级之间最好直接使用\防止转义cv2.waitKey(1) 在有按键按下的时候返回按键的ASCII值,否则返回-1 按位与& 全1为1,不全为0 VideoCapture.release() 释放摄像头,停止捕获视频 cv2.destroyAllWindows() 释放并销毁窗口,即关闭相应的显示窗口。 2.手动按键截图 import cv2 cap = cv2.VideoCapture(0,cv2.CAP_DSHOW) flag = cap.isOpened() index = 1 while (flag): ret, frame = cap.read() left_img = frame[:, 0:640, :] right_img = frame[:, 640:1280, :] cv2.imshow('left', left_img) cv2.imshow('right',right_img) # cv2.imshow("Capture_Camare", frame) k = cv2.waitKey(1) & 0xFF if k == ord('s'): # 按下s键,进入下面的保存图片操作 cv2.imwrite("D:\\programme\\pictures01\\" + str(index) + ".jpg", right_img) print("save" + str(index) + ".jpg successfuly!") print("-------------------------") index += 1 elif k == 27: # 按下Esc键,程序退出 break cap.release() cv2.destroyAllWindows()waitKey() 在一个给定的时间内(单位ms)等待用户按键触发;如果用户没有按下键,则继续等待(循环) while(1){ if(waitKey(100)==27)break; } 在这个程序中,我们告诉OpenCv等待用户触发事件,等待时间为100ms,如果在这个时间段内,用户按下ESC(ASCII码为27),则跳出循环,否则,则跳出循环 如果设置waitKey(0),则表示程序会无限制的等待用户的按键事件cv2.VideoCapture(0,cv2.CAP_DSHOW) 不知道为什么,直接使用参数1无法像上一段代码一样正常打开USB摄像头,但是加上CAP_DSHOW参数并且改变摄像头序列就好了 |
CopyRight 2018-2019 实验室设备网 版权所有 |