我尝试使用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相机:
我在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 上确认。
| 归档时间: |
|
| 查看次数: |
2303 次 |
| 最近记录: |