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

无法更改OpenCV视频捕获分辨率

卞昀
2023-03-14

我遇到的问题是,我无法更改OpenCV视频捕获的分辨率。不管怎样,分辨率总是640x480。我使用的代码是用C编写的,我使用的是opencv 3.4.8。我已经创建了一个超级简单的程序来做这件事,不管我怎么尝试,它似乎都不起作用。

以下是完整的代码:

#include "opencv2/opencv.hpp"
using namespace cv;
int main(int argc, char** argv)
{
    VideoCapture cap(0);
    cap.set(CAP_PROP_FRAME_HEIGHT, 1080);
    cap.set(CAP_PROP_FRAME_WIDTH, 1920);


    // open the default camera, use something different from 0 otherwise;
    // Check VideoCapture documentation.
    if (!cap.open(0))
        return 0;
    for (;;)
    {
        Mat frame;
        cap.read(frame);
        if (frame.empty()) break; // end of video stream
        imshow("this is you, smile! :)", frame);
        if (waitKey(10) == 27) break; // stop capturing by pressing ESC 
    }
    // the camera will be closed automatically upon exit
    // cap.close();
    return 0;
}

当我运行上述代码时,帧总是640x480。

我已尝试使用cap更改分辨率。将()。我使用的是ImageSource摄像机,我知道摄像机支持我尝试使用的分辨率,我可以在其他程序中以这些分辨率观看视频。

我试过使用不同的摄像头/网络摄像头。

当我创建VideoCapture对象时,我尝试显式更改后端API-即VideoCapture cap(0,CAP_DSHOW)。我尝试了DSHOWFFMPEGIMAGES等。

我试过在不同的计算机上运行相同的程序。

结果总是相同的640x480分辨率。

有什么简单的我错过了吗?我在SO上找到的其他帖子似乎都指向使用cap.set()来改变宽度和高度。


共有2个答案

束俊英
2023-03-14

结果表明错误出现在“if(!cap.open(0))”行中,我正试图使用该行检查cap是否已成功初始化。

我的印象是打开只是返回真,如果视频捕获对象是打开或假,否则。但是如果视频捕获对象已经打开,它实际上会释放它,然后重新打开它。

长话短说,这意味着当对象用cap.open(0)重新打开时,我用来更改分辨率的cap.set()调用被擦除。此时分辨率被设置回默认值640x480。

我要找的方法是cap。IsoPend(),如果对象处于打开状态,则仅返回true或false。一个简单、愚蠢的错误。

长孙鸿波
2023-03-14

这取决于您的相机后端是什么。正如文件所说:

每个后端都以不同的方式支持设备属性(cv::VideoCaptureProperties),或者可能根本不支持任何属性。

在此留档中还提到:

读/写属性涉及许多层。沿着这条链可能会发生一些意想不到的结果。有效的行为取决于设备硬件、驱动程序和API后端。

OpenCV视频I/O模块似乎不支持您的相机后端。

注意:我也遇到过这样的相机,其中一些不同的分辨率在不同的数字下工作。例如,您可以通过尝试VideoCaptur(-1)VideoCapture(1)VideoCapture(2)来捕获所需的分辨率...

 类似资料:
  • 我在Ubuntu 12.04 64位上使用OpenCV 2.4.5。我希望能够设置我的罗技C310网络摄像头输入的分辨率。相机支持高达1280x960在30fps,我能够在guvcview在这个分辨率查看视频。但是OpenCV总是以640x480的速度获取视频。 试图用cap更改分辨率。设置(CV\U CAP\U PROP\U FRAME\U WITH,1280)和CAP。创建视频捕获封盖后立即设

  • 我正在OpenCV(2.4.8)中创建一个程序,可以读取视频文件并对其进行计算。对于这些计算,我不需要高分辨率的帧,我可以用640*360作为分辨率。 在早期的测试中,我连接了网络摄像头,我使用了: 它完美地调整了图像的大小。现在,我要进入下一步,我想用我的程序来存储视频,而不是一个实时提要(我用来测试)。当我用源文件路径(字符串)更改“0”时,将加载文件,但分辨率仍为1920*1080。 我做错

  • 我想用我的相机拍摄1920x1080视频,但我遇到了两个问题 初始化视频捕获时,它会将宽度/高度更改为640/480 当我试图在cv2中更改宽度/高度时,图像变得混乱 当在cv2中设置1920x1080时,图像变成蓝色,底部有一个故障条 根据v4l2-ctl,事情是这样的。蓝色图像似乎不是像素格式变化的结果(例如。RGB至BGR) 最后,这里是一个以640x480拍摄的具有正确颜色的图像示例。代码

  • 我尝试用全高清分辨率的罗技C920摄像头捕捉视频。它提供30 fps与此分辨率。 它以30 fps的速度与windows摄像头应用程序配合使用,但无论我如何尝试,我都无法通过opencv videoCapture获得这种fps速度。 注意:我使用windows 10和vs15。我尝试了不同的usb端口,opencv版本和编解码器。结果是相同的,〜5 fps。 我测量fps忽略前10帧。下面是我的计

  • cv2无法设置fps,但我可以使用更改fps; 和决议; 但是当我尝试去做的时候; 捕获速度为60fps,但分辨率为320x240。很明显,cv2。视频捕获会改变分辨率。好的,所以它不关心v4l2 ctl写入的设置,并覆盖它自己的设置。所以我尝试; 图像是640x480的预期,但帧速率下降到30fps。这次它重写fps值。即使相机支持它,我也不能让它在640x480@60fps工作。 任何防止cv

  • 硬件: 1.树莓派2 2.树莓派相机 软件: 1。OpenCV 2.4。11 2。用C语言编程 我有以下简单的代码,可以从摄像机捕获视频并在窗口中显示 帧大小始终为640 x 480,尝试更改帧的宽度和高度(如注释行所示)没有帮助,并且保持为640 x 480。 我正在寻找一种方法,将帧的宽度和高度从我的代码(而不是外壳)更改为1920 x 1080 如果可以通过OpenCV或V4l2驱动程序完成