2016-12-07 116 views
1

我在Windows 10 64位上使用OpenCV 3.1.0。我希望能夠設置攝像頭的分辨率,同時攝像頭仍然工作。相機工作後設置分辨率很容易。但是當攝像頭捕捉時我無法設置分辨率。OpenCV:在捕獲時更改VideoCapture的分辨率

這裏是我的代碼:

cv::VideoCapture cap(0); 
cap.set(cv::CAP_PROP_FRAME_WIDTH, 0x7FFFFFFF);   // working 
cap.set(cv::CAP_PROP_FRAME_HEIGHT, 0x7FFFFFFF);   // working 

while (true) { 
    cv::Mat frame; 
    cap >> frame; 
    if (!frame.data) continue; 
    cv::imshow("test", frame); 
    if (cv::waitKey(1) >= 0) break; 

    int newHeight = 500 + rand() % 4 * 100; 
    cap.set(cv::CAP_PROP_FRAME_HEIGHT, newHeight);  // not working 
} 

int newHeight = 500 + rand() % 4 * 100; 
cap.set(cv::CAP_PROP_FRAME_HEIGHT, newHeight);   // not working 

回答

1

問題是我只設置了一個隨機高度,而網絡攝像頭只支持其預設分辨率。所以它選擇一個最佳匹配的預設分辨率來顯示它。

1

我最好的猜測是CAP_PROP_FRAME_HEIGHT您正試圖不被攝像頭所支持的值。如果將攝像頭掛在Linux機器上,可以使用v4l2-ctl -d 0 --list-formats-ext列出支持的視頻格式。在這裏,輸出爲Microsoft LifeCam的電影節選:

Index  : 1 
    Type  : Video Capture 
    Pixel Format: 'MJPG' (compressed) 
    Name  : Motion-JPEG 
      Size: Discrete 640x480 
        Interval: Discrete 0.033s (30.000 fps) 
        Interval: Discrete 0.050s (20.000 fps) 
        Interval: Discrete 0.067s (15.000 fps) 
        Interval: Discrete 0.100s (10.000 fps) 
        Interval: Discrete 0.133s (7.500 fps) 
      Size: Discrete 1280x720 
        Interval: Discrete 0.033s (30.000 fps) 
        Interval: Discrete 0.050s (20.000 fps) 
        Interval: Discrete 0.067s (15.000 fps) 
        Interval: Discrete 0.100s (10.000 fps) 
        Interval: Discrete 0.133s (7.500 fps) 
      ... 

我最近沒有檢查是否在Windows上有一些類似v4l2-ctl,它使用UVC查詢從相機的信息。 UVC通常由最近的網絡攝像機支持。

+0

我很狡猾,我的攝像頭支持。我從你的評論中得到了一條小貼士,並找到了問題。謝謝你了。 –