OpenCV捕获带有黑色边栏的imagem

Mar*_*uza 6 python opencv

我尝试使用cv2.VideoCapture和比例为16:9的相机捕获照片和视频。但是所有图像都是由OpenCV返回的,带有黑色的一面,裁剪了图像。在我的示例中,它不返回1280 x 720的图像,而是返回960 x 720的图像。使用网络摄像机C920(1920 x 1080)也会发生相同的情况。

我做错了什么?

import cv2

video = cv2.VideoCapture(0)
video.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
video.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)

while True:
    conected, frame = video.read()
    cv2.imshow("Video", frame)
    if cv2.waitKey(1) == ord('s'):
        video.release()
        break

cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

使用OpenCV:

黑边图像

使用Windows相机:

在此处输入图片说明

lui*_*sas 6

我在Windows摄像头中使用Logitech广角镜头遇到了这个确切问题,我想知道驱动程序问题。

所以我使用DirectShow驱动程序而不是使用本机驱动程序解决了这个问题:

cv2.VideoCapture(cv2.CAP_DSHOW)
Run Code Online (Sandbox Code Playgroud)

如果您有多个摄像头,则将索引添加到该值,像这样

cv2.VideoCapture(cv2.CAP_DSHOW + camera_index)
Run Code Online (Sandbox Code Playgroud)

通过使用正确的宽高比而没有侧边栏,它将接受所需的分辨率。


小智 5

@luismesas 的答案是完全正确的,对我有用。

但是对于像我这样不熟练的人,您需要保存 cv2.VideoCapture 返回的捕获。它不是您可以像 cv2.VideoCapture(cv2.CAP_DSHOW) 一样设置的参数,它是一种方法。

camera_index = 0
cap = cv2.VideoCapture(camera_index, cv2.CAP_DSHOW)
ret, frame = cap.read()
Run Code Online (Sandbox Code Playgroud)

在网络摄像头设备 HD PRO WEBCAM C920 上确认。