2014-01-08 57 views
1

我寫了一個簡單的OpenCV程序,可以恢復我的網絡攝像頭視頻流並將其顯示在一個簡單的窗口中。我想調整這個窗口的分辨率爲256x256,但它將其更改爲320x240。使用OpenCV可以使用網絡攝像頭視頻流進行平方分辨率嗎?

這裏是我的源代碼:

#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,我想一個256×256的分辨率。我認爲這是不可能的,因爲相機管理其輸出視頻流緩衝區,並且必須保持相同的比率(寬度/高度)。你對這個想法有什麼看法?

是否有一個函數可以強制使用OpenCV作爲平方分辨率的分辨率?

非常感謝您的幫助。

+0

'cv :: namedWindow()'使用默認參數'int flags = WINDOW_AUTOSIZE'。將其更改爲'cv :: namedWindow(「windowname」,WINDOW_NORMAL)',您將可以調整窗口大小。另一種可能性是調整圖像大小並在窗口中顯示完整大小。 – Micka

回答

0

好像你視頻源不處理256x256分辨率。如果你想要顯示它,你必須在顯示它之前自己裁剪圖像。

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

+0

這與問題中的代碼完全相同,只是在C++而不是C中。但是我只是注意到,在將源代碼添加到問題之前,您已經做出了答案。 –

+0

@HannesOvrén在他/她添加代碼之前,我回答了這個問題。 – herohuyongtao

相關問題