gpt4 book ai didi

Python OpenCV 访问网络摄像头最大分辨率

转载 作者:太空狗 更新时间:2023-10-29 20:11:11 27 4
gpt4 key购买 nike

我正在尝试使用导入 OpenCV 的 Python 代码从我的网络摄像头获取图像。代码如下:

import sys
sys.path.append("C:\\opencv\\build\\python\\2.7")
import cv2
import cv2.cv as cv
import time

# Set resolution
cap = cv2.VideoCapture(0)
print "Frame default resolution: (" + str(cap.get(cv.CV_CAP_PROP_FRAME_WIDTH)) + "; " + str(cap.get(cv.CV_CAP_PROP_FRAME_HEIGHT)) + ")"
cap.set(cv.CV_CAP_PROP_FRAME_WIDTH, 800)
cap.set(cv.CV_CAP_PROP_FRAME_HEIGHT, 600)
print "Frame resolution set to: (" + str(cap.get(cv.CV_CAP_PROP_FRAME_WIDTH)) + "; " + str(cap.get(cv.CV_CAP_PROP_FRAME_HEIGHT)) + ")"

# Acquire frame
capture = cv.CreateCameraCapture(0)
img = cv.QueryFrame(capture)

代码工作正常,除了相机默认分辨率为 640x480,而且我的代码似乎只能设置低于该值的分辨率值。例如,我可以将图像大小设置为 320x240,但无法将其更改为 800x600。我没有出现任何错误:只是将分辨率设置为默认值 (640x480),因为我尝试将其设置为更高的值。

我使用的相机(没有其他网络摄像头连接到计算机)是 QuickCam V-UBK45:使用罗技提供的软件,我能够以全分辨率 (1280x960) 和所有中间分辨率拍摄照片 (例如 800x600)。

因此,硬件支持这些帧大小,但我的代码无法访问它们。

有人知道我能做什么吗?

最佳答案

如上问题是摄像头驱动引起的。我能够使用 Direct Show 作为后端来修复它。我读到(抱歉,但我不记得在哪里)几乎所有相机都提供允许从 DirectShow 使用它们的驱动程序。因此,我在 Windows 中使用 DirectShow 与摄像头进行交互,我能够根据需要配置分辨率,还可以获得摄像头的原始纵横比 (16:9)。

您可以试试这段代码,看看它是否适合您:

import cv2

cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) # this is the magic!

cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)

r, frame = cap.read()
...
print('Resolution: ' + str(frame.shape[0]) + ' x ' + str(frame.shape[1]))

在 OpenCV 文档中,我为那些想了解更多 OpenCV 后端的人找到了以下信息 ( OpenCV docs )

希望对您有所帮助!

关于Python OpenCV 访问网络摄像头最大分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19448078/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com