使用opencv中的videocaputre来获取摄像头,使用imwrite函数保存图像。opencv默认的分辨率是640480,不是相机真实的分辨率25601440,然后自己对保存的图片的分辨率进行设置,设置为2560*1440。结果偶尔出现保存的图片存在黑色区域,如下图所示:
import cv2
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
cap.set(cv2.CAP_PROP_FPS, 30)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 2560)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1440)
if cap.isOpened():
ret, frame = cap.read()
cv2.imwrite(save_path, frame)
cap.release()
1,不用设置分辨率,打开的时候,读取分辨率及帧率打印看一下,是不是摄像头本身的
2,在循环中,满足条件时截图保存,下边代码供参考
import cv2
cap = cv2.VideoCapture(0)
print(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
print(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print(cap.get(cv2.CAP_PROP_FPS))
#循环读取每一帧
while(cap.isOpened()):
#第一个返回值result是一个布尔值,表示当前这一帧是否获取正确
result, frame = cap.read()
#读取视频文件结束时,退出播放
if not result:
print('play end...')
break
#满足某条件时截图,保存,比如按下空格键
key = cv2.waitKey(1)
if 32 == key:
cv2.imwrite(save_path, frame)
cap.release()
我试了没问题啊 试了好多次 是不是你摄像头驱动的问题
还有分辨率是不是你摄像头的分辨率
ret, frame = cap.read()之后需要判断一下ret是否为True,不然就会像你这样出现cap读取失败,或者读取的图片有误,但是你存储下来的问题
你看看图片出错的时候左上角有图像部分分辨率是不是640*480,如果是的话opencv分辨率被篡改了,按照这个方向查查原因