[C++] 無法使用OpenCV從輔助攝像頭的VideoCapture中讀取幀


Answers

最簡單的方法就是在檢查成功之前閱讀一次。 這段代碼片段適合我。 //

cap.read(frame);
if(!cap.read(frame)){

// ...

Question

碼:

與主攝像頭(設備0)完美配合的簡單示例:

VideoCapture cap(0);

if (!cap.isOpened()) {
     std::cout << "Unable to read stream from specified device." << std::endl;
     return;
}

while (true)
{
    // retrieve the frame:
    Mat frame;
    if (!cap.read(frame)) {
        std::cout << "Unable to retrieve frame from video stream." << std::endl;
        break;
    }
    // display it:
    imshow("MyVideo", frame);

    // check if Esc has been pressed:
    if (waitKey(1) == 27) {
        break;
    }
    // else continue:
}

cap.release();

問題:

我有第二個攝像頭,我想使用。 但是,當我更換VideoCapture cap(0); 帶有視頻VideoCapture cap(1);流正在打開正確 (或至少cap.isOpened()返回true ), cap.read(frame)調用返回false ,我無法找出原因。

我試過了:

  • 我一直在嘗試玩VideoCapture的設置有點像調用:

    cap.set(CV_CAP_PROP_FORMAT, CV_8UC3);

    和隨機的東西,但似乎沒有任何幫助。

  • 我還發現: VideoCapture :: read在未壓縮的視頻(Bug#2281)上失敗 ,這似乎在版本2.4.7上得到了解決,但是我剛剛更新了OpenCV到2.4.8,但它仍然沒有工作...

  • 我試圖使用AMCap從這個攝像頭捕捉原始視頻,保存為aaa.avi文件,通過調用構建VideoCapture

    VideoCapture cap("aaa.avi");

    它工作(而從文件中讀取)...我需要的是實時處理與實時視圖。

硬件,操作系統,軟件細節:

我的硬件:惠普ProBook 4510s內置攝像頭,始終完美的作品
+外置攝像頭CANYON CNR-FWCII3,被操作系統稱為“USB視頻設備”(麻煩的一個)操作系統,軟件:Windows 8.1 Pro x86,Visual Studio 2012 Pro,OpenCV 2.4.8〜使用vc11 build

問題:

  1. 我錯過了什麼嗎?
  2. 還有什麼我可以做的嗎?
  3. 至少有什麼方法可以檢索一些關於這個問題實際上是什麼的附加信息?

... OpenCV的API在這個案例中似乎相當差勁,在所有人們似乎都面臨類似問題的地方,有人聲稱它是“OS / HW depnendant”作為藉口。

任何幫助將不勝感激。