我写了一个简单的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强制分辨率为方形分辨率?
非常感谢您的帮助。
答案 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分辨率。如果要这样显示,则必须在显示之前自己裁剪图像。