2013-10-18 196 views
6

我想从我的摄像头采用导入OpenCV的Python代码获取图像。代码如下:Python OpenCV访问摄像头最大分辨率

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)。

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

有谁知道我能做什么?

+1

在其他应用程序中,相机是否在640x480下捕捉*视频*? – goncalopp

+0

@goncalopp说,让我觉得,他们可能会限制驱动程序中*视频流*(带宽)的分辨率,而他们的应用程序仍然可以在较高分辨率下拍摄*单个*图片。 – berak

+0

您是否知道cv2中的代码,因为不要混合cv和cv2。有任何想法吗? –

回答

0

我和你有同样的问题,我不能在opencv不同的“应用程序”中获得更高的分辨率。但使用罗技软件,我可以用720p录制视频(相机C270)。经过几天的研究,我得出了与@break相同的解释,即他们限制了司机的决议。我放弃了它,并会购买不同的,非罗技,一个...

6

我用不同的分辨率,以通过遍历

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)) 

this是我得到了来自List of common resolutions设置图像分辨率。

看来,简历或我的相机只允许某些决议。

  • 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

3

我得到它的工作,所以这个职位是给别人遇到了同样的问题:

我在罗技C270运行也是如此。出于某种原因,即使网络摄像头支持1280x720,它也只会显示640x480。我的笔记本电脑内置网络摄像头仍然存在同样的问题。

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

这是OpenCV 3上的C++。0,但也许它也适用于Python。

+0

这是正确的,试着'(7680,4320)'给我'(1280.0,720.0)'给我,这是我的相机的最大分辨率。 – Rockybilly

0

对于cv2只是改变这一点。

cap.set(cv2.CAP_PROP_FRAME_WIDTH, 800) 
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 600) 
相关问题