opencv保存图片出现黑色区域

使用opencv中的videocaputre来获取摄像头,使用imwrite函数保存图像。opencv默认的分辨率是640480,不是相机真实的分辨率25601440,然后自己对保存的图片的分辨率进行设置,设置为2560*1440。结果偶尔出现保存的图片存在黑色区域,如下图所示:

img


这种情况是偶然出现,大概1000张有4张左右。
代码如下:

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分辨率被篡改了,按照这个方向查查原因