是否可以使用OpenCV获得带有网络摄像头视频流的方形分辨率?

时间:2014-01-08 13:17:25

标签: opencv

我写了一个简单的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强制分辨率为方形分辨率?

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

很简单,您可以通过以下方式完成此操作:

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()手动调整其大小。

答案 1 :(得分:0)

好像你的视频源不能处理256x256分辨率。如果要这样显示,则必须在显示之前自己裁剪图像。