【问题标题】:Is it possible to have a square resolution with a webcam video stream using OpenCV?使用 OpenCV 是否可以通过网络摄像头视频流获得正方形分辨率?
【发布时间】:2014-01-08 22:39:55
【问题描述】:

我编写了一个简单的 OpenCV 程序,它可以恢复我的网络摄像头视频流并将其显示在一个简单的窗口上。我想将此窗口的大小调整为 256x256 的分辨率,但它已将其更改为 320x240。

这是我的源代码:

#include <iostream>
#include <opencv/cv.h>
#include <opencv/highgui.h>

using namespace std;

int main(int argc, char** argv)
{
    char key;
    cvNamedWindow("Camera_Output", cv::WINDOW_NORMAL);
    CvCapture *capture = cvCaptureFromCAM(CV_CAP_ANY);

    cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, 256);
    cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, 256);

    while(1){

        IplImage *frame = cvQueryFrame(capture);

        cvShowImage("Camera_Output", frame);

        key = cvWaitKey(10);
        if (key == 27){
            break;
        }
    }
    cvReleaseCapture(&capture);
    cvDestroyWindow("Camera_Output");

    return 0;
}

输出分辨率为 320x240,我想要 256x256 的分辨率。我认为这是不可能的,因为相机管理其输出视频流缓冲区并且它必须保持相同的比率(宽度/高度)。您如何看待这个想法?

是否有一个函数可以使用 OpenCV 将分辨率强制为正方形分辨率?

非常感谢您的帮助。

【问题讨论】:

  • cv::namedWindow() 使用默认参数int flags=WINDOW_AUTOSIZE。将其更改为cv::namedWindow("windowname",WINDOW_NORMAL),您将能够调整窗口大小。另一种可能性是调整图像大小并在窗口中全尺寸显示。

标签: opencv


【解决方案1】:

您的视频源似乎无法处理 256x256 分辨率。如果你想这样显示它,你必须在显示之前自己裁剪图像。

【讨论】:

    【解决方案2】:

    很简单,你可以这样做:

    VideoCapture cap;
    cap.open(0); // open your web-camera
    cap.set(CV_CAP_PROP_FRAME_WIDTH, 256); 
    cap.set(CV_CAP_PROP_FRAME_HEIGHT, 256); 
    

    如果这不起作用,您需要通过调用cv::resize() 手动调整其大小。

    【讨论】:

    • 这与问题中的代码完全相同,只是用 C++ 而不是 C。但我只是注意到您在将源代码添加到问题之前就已经回答了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多