2016-10-25 39 views
2

我購買了一個ELP-1MP2CAM001,它在Windows上顯示爲兩個網絡攝像頭設備。如果我打開Windwos默認的「相機」應用程序和Skype,我可以同時顯示來自左側和右側相機的提要。我不認爲這是兩個攝像頭進入同一端口的USB帶寬問題OpenCV便宜的立體相機無法同時加載兩個流

我使用相當標準的代碼(如下所示)來打開這兩個提要,並且如果我使用兩個標準微軟HD3000攝像頭,而不是單個立體攝像頭。

我試過cap2()參數內的一系列數字,所以我不認爲它隱藏在數字10或任何奇怪的東西。

我的問題是:

  1. 必須有某種對對ELP攝像頭板中心,做我需要做的事情在OpenCV的不同?
  2. 是不是可以通過cap(0)訪問這兩個框架?這對我來說似乎不太可能。
  3. This問題說我不需要做任何特別的事情?但顯然我錯過了一些東西。

對此的任何幫助將是偉大的。


代碼:

#include <opencv2/opencv.hpp> 

using namespace cv; 

int main(int, char**) 
{ 


    VideoCapture cap(0); // open the default camera 
    VideoCapture cap2(1); // open the default camera 

    cap.set(CV_CAP_PROP_FRAME_WIDTH, 240); 
    cap.set(CV_CAP_PROP_FRAME_HEIGHT, 120); 

    cap2.set(CV_CAP_PROP_FRAME_WIDTH, 240); 
    cap2.set(CV_CAP_PROP_FRAME_HEIGHT, 120); 

    if (!cap.isOpened()) // check if we succeeded 
     return -1; 

    if (!cap2.isOpened()) // check if we succeeded 
     return -1; 

    Mat frame; 
    Mat frame2; 
    namedWindow("Frame", 1); 
    namedWindow("Frame2", 1); 

    for (;;) 
    { 
     Mat frame; 
     cap >> frame; // get a new frame from camera 
     imshow("Frame", frame); 

     Mat frame2; 
     cap2 >> frame2; 
     imshow("Frame2", frame2); 





     if (waitKey(30) >= 0) break; // Finish on "esc" key 
    } 
    // the camera will be deinitialized automatically in VideoCapture destructor 
    return 0; 
} 

回答

0

根據VideoCapture文檔,有一種叫做cv::VideoCapture::grab函數:

功能的主要用途是在多相機的環境中,尤其是當攝像機沒有硬件同步時。也就是說,你叫VideoCapture::grab()每個攝像頭和後調用速度較慢的方法VideoCapture::retrieve()解碼並從每個攝像機獲得幀

你可以試試,用:

cap.grab(); 
cap.retrieve(...); 
+1

這似乎是一個非常明智的解決方案,我有一個breif戲劇,但什麼都沒有。在此期間我已經購買了一些其他相機,因此這些工作正在取得進展。我會更新,如果我得到任何地方 – GPPK

+0

嗯主要問題似乎是cap2(1)實際上並沒有真正返回... – GPPK