[Python] OpenCV 摄像头黑边问题 - 彻底解决

接上一篇博文(https://blog.csdn.net/weixin_46185214/article/details/105847828), 本次找到我的问题根源了

今天做截图保存的时候发现截图分辨率是640x480 ,但在截图前我是没有做任何resize的

flag, self.img0 = self.cap0.read()
cv2.imshow("capture", self.img0)
cv2.imwrite(fileName, self.img0)

是不是摄像头本身只支持640x480呢?为确定此点,先将2个摄像头(一个笔记本自带,一个USB摄像头),分辨率设为 5000 x 5000(超出摄像头本身分辨率即可),然后用get方法就可以获取摄像头支持的最大分辨率

print("CAM0 分辨率 %d x %d" % (self.cap0.get(cv2.CAP_PROP_FRAME_WIDTH),
                              self.cap0.get(cv2.CAP_PROP_FRAME_HEIGHT)))

结果笔记本摄像头是1280x720, USB摄像头是1920x1080 ,摄像头本身没有问题。

这就说明是videoCapture时设置的分辨率没起作用,重新捋一遍代码,发现疑点。

在videoCapture时, 我加了flag来判断摄像头打开与否,那么是不是在open的时候,分辨率设置归零了呢?

flag = self.cap0.open(CamId)

于是在open()前后打印分辨率, 结果证实了我的判断, 在open() 后分辨率变成了默认的640x480 。

这就好解决了, 在open()后设置分辨率,结果一切正常。

flag = self.cap0.open(CamId) 
self.cap0.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)  # 笔记本自带摄像头最大分辨率
self.cap0.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)

index + cv2.CAP_DSHOW 去黑边是没问题的。 至此,问题完美解决。

猜你喜欢

转载自blog.csdn.net/weixin_46185214/article/details/105857285