当前位置: 首页 > 知识库问答 >
问题:

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

秦俊豪
2023-03-14

我试图从我的摄像头获取图像使用导入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)拍照。

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

有人知道我能做什么吗?

共有3个答案

邹博裕
2023-03-14

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

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

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

这是OpenCV 3.0上的C语言,但可能也适用于Python。

孟嘉歆
2023-03-14

我使用不同的分辨率来设置图像分辨率从常见的分辨率列表通过循环

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

  • 漆雕欣德
    2023-03-14

    上述问题是由摄像头驱动程序引起的。我能够修复它使用直接显示作为后端。我读到(对不起,我不记得在哪里)几乎所有的相机都提供了一个驱动程序,允许从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后端(OpenCV docs)的人找到了以下信息

    我希望这能帮助你!

     类似资料:
    • 问题内容: 我想从Python访问我的网络摄像头。 我尝试使用VideoCapture扩展(教程),但对我而言效果不佳,我不得不解决一些问题,例如分辨率> 320x230时它有点慢,有时它返回时没有明显原因。 是否有更好的方法从Python访问我的网络摄像头? 问题答案: OpenCV支持从网络摄像头获取数据,并且默认情况下随附Python包装器,您还需要安装OpenCV Python扩展名(称为

    • 我正在开发一个web应用程序,它可以浏览和拍摄本地照片,我还想通过相机拍摄图像。我使用下面的代码,我可以捕捉设备摄像头。 现在,我想获得图像和onchangeevent,转换为base64,并希望在该页面中显示。 好心帮我伙计们!

    • 我想使用ffmpeg直播网络摄像头。我的罗技c920网络摄像头具有原始和压缩数据的输出流。命令产生以下控制台输出: 我想复制压缩的h264图像并将其发送到ffserver。 当我使用这个命令程序获取原始数据并使用h264编解码器转码。 当我将更改为时,我收到一个错误,因为ffmpeg尝试复制原始相机图像。 如何访问h264压缩图像并将其发送到服务器?

    • 我在主机上运行Ubuntu18.04,在LXC容器中运行Ubuntu20.04。我的目标是在一个LXC容器中运行ROS2(需要Ubuntu 20.04),然后用它连接两个dynamixel伺服电机和一个USB Logitech网络摄像头。我还在容器中安装了miniconda,以便安装OpenCV和dlib。我还在容器内使用conda虚拟环境。 所有提到的软件工作正常。现在我需要用OpenCV访问网

    • 问题内容: 如何连续从摄像头捕获图像? 我想尝试对象识别(也许使用Java Media Framework)。 我当时正在考虑创建两个线程 一个线程: 节点1:捕获实时图像 节点2:将图片另存为“ 1.jpg” 节点3:等待5秒 节点4:重复… 其他线程: 节点1:等到捕获图像 节点2:使用“ 1.jpg”获取每个像素的颜色 节点3:将数据保存在数组中 节点4:重复… 问题答案: 此JavaCV实

    • 问题内容: 我一直在尝试使用Python创建一个简单的程序,该程序使用OpenCV从我的网络摄像头获取视频供稿并将其显示在屏幕上。 我知道我之所以在这里,是因为创建了窗口,并且网络摄像头上的灯闪烁了,但是它似乎在窗口中什么都没有显示。希望有人可以解释我在做什么错。 在不相关的注释上,我注意到我的网络摄像头有时会在中更改其索引号,有时我需要输入0、1或2,即使我只连接了一个摄像头,也没有拔下插头(我