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

Python OpenCV访问网络摄像头最大分辨率,python,opencv,webcam,resolution,logitech,Python,Opencv,Webcam,Resolution,Logitech,我正在尝试使用导入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

我正在尝试使用导入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:通过Logitech提供的软件,我能够以全分辨率(1280x960)和所有中间分辨率(例如800x600)拍照

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


有人知道我能做什么吗?

我和你有同样的问题,我无法在
opencv
不同的“应用程序”中获得更高的分辨率。但有了罗技软件,我可以用720p(摄像头C270)录制视频。经过几天的研究,我得出了与@break相同的解释,他们限制了驱动程序的分辨率。我放弃了它,将买一个不同的,非罗技的,一个…

我通过循环使用不同的分辨率来设置图像分辨率

def set_res(cap, x,y):
    cap.set(cv.CV_CAP_PROP_FRAME_WIDTH, int(x))
    cap.set(cv.CV_CAP_PROP_FRAME_HEIGHT, int(y))
    return str(cap.get(cv.CV_CAP_PROP_FRAME_WIDTH)),str(cap.get(cv.CV_CAP_PROP_FRAME_HEIGHT))
似乎OpenCV或我的相机只允许某些分辨率

  • 160.0 x 120.0

  • 176.0 x 144.0

  • 320.0 x 240.0

  • 352.0 x 288.0

  • 640.0 x 480.0

  • 1024.0 x 768.0

  • 1280.0 x 1024.0


我让它工作了,所以这篇文章是为其他遇到同样问题的人写的:

我也在使用罗技C270。由于某些原因,即使网络摄像头支持1280x720,它也只能显示640x480。我笔记本电脑中的内置网络摄像头也存在同样的问题

如果我在代码中将其设置为800x600,它将显示640x480。但是,如果我将其设置为1024x768,它将变为800x600。如果我将它设置为像2000x2000这样的愚蠢值,它就会变成1280x720


这是在OpenCV 3上的C++,但也可能应用到Python。

< > CV2,只需更改为。
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, 800)
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 600)

上述问题是由摄像头驱动程序引起的。我能够修复它使用直接显示作为后端。我读到(对不起,我不记得在哪里)几乎所有的相机都提供了一个驱动程序,允许从DirectShow使用。因此,我在Windows中使用DirectShow与相机交互,我可以根据需要配置分辨率,还可以获得相机的本机纵横比(16:9)。 您可以尝试此代码,看看这是否适合您

import cv2

cam = cv2.VideoCapture(0,cv2.CAP_DSHOW)

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

r, frame = cam.read()
...
print('Resolution: ' + str(frame.shape[0]) + ' x ' + str(frame.shape[1]))
在OpenCV文档中,我为那些想了解更多OpenCV后端的人找到了以下信息()


我希望这能帮助你

请尝试以下代码以获得最大相机分辨率,使用此选项,您可以使用最大分辨率拍摄照片或视频:

import cv2

HIGH_VALUE = 10000
WIDTH = HIGH_VALUE
HEIGHT = HIGH_VALUE

capture = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
capture.set(cv2.CAP_PROP_FRAME_WIDTH, WIDTH)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, HEIGHT)
width = int(capture.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT))

print(width,height)

OpenCV现在只允许这些分辨率

  • “320.0x240.0”:“确定”
  • '640.0x480.0':'OK'
  • “1280.0x720.0”:“OK”
  • 资料来源:

    这些是共同的决议。它可能支持更多的决议,你可以检查。 如果找不到支持的解决方案。您还可以使用:

    frame = imutils(frame, width = 720)
    
    这会将您设置为更接近支持的分辨率。 注意:使用所需的宽度值,并将其设置为更接近支持的分辨率,然后可以使用以下方法检查支持的分辨率:

    print(frame.shape)
    

    imutils方法完全基于经验和测试。

    摄像头是否在其他应用程序中以640x480的速度捕获视频?@goncalopp说的话让我想到,他们可能会限制驱动程序中视频流的分辨率(带宽),而他们的应用程序仍然能够在更高的rez下拍摄单张照片。你知道cv2中的代码吗,比如不要混合cv和cv2。有什么想法吗?这是正确的,尝试
    (76804320)
    会给我
    (1280.0720.0)
    ,这是我相机的最大分辨率。这是为我做的。非常感谢。伟大的这就成功了,而且它的启动速度比标准的backendMERCI BEAUCOUP快得多,cv2.CAP_DSHOW解决了所有问题。我在这个问题上讨论了两个小时。有关信息,罗技C310的代码在Windows 7上运行时没有它,但在使用相同摄像头的Windows 10上没有。这不是答案。您可能希望对此问题进行评论。