2012-07-17 62 views
0

嗨,我試圖在OpenCV中使用使用以下基本命令 攝像頭顯示的視頻2.4.1: -顯示使用的OpenCV 2.4.1視頻

int main() 

{ cv::Mat san; 

    cv::VideoCapture san_cap(0); 

    while(1) 
    { 
    san_cap.read(san); 

    cv::imshow("gp",san); 

    if(cv::waitKey(0) >=0) 

     break; 
    } 

    return 1; 

    } 

編譯我沒有得到任何錯誤,但在運行時我溶液我的輸出視頻stucked的固定框架上,並在我的控制檯I是具有以下錯誤: -

VIDIOC_QUERYMENU:無效的參數

上一行一行debbuging我的代碼FO und out我得到錯誤在這個特定的行

if(cv::waitKey(0) >= 0) 

什麼可以是這條線的錯誤?

+0

錯誤不在這一行,這只是觸發所有更新的事件循環。 VIDIOC_QUERYMENU表示相機驅動程序得到了不好的數據。 – 2012-07-17 18:16:42

+0

但是當我評論這一行時,我沒有得到任何錯誤 – 2012-07-17 18:18:28

+0

當你註釋掉這一行opencv不顯示任何圖像! – 2012-07-17 18:18:54

回答

1

我不知道你想用cv::waitKey()做什麼,但我認爲你的例子應該工作,如果你改變它。如前所述,waitKey應設置爲10,並且您應該始終檢查videoCapture是否實際打開。如果無法打開,則說明您的硬件/驅動程序/ os/OpenCV安裝有問題。

int main() { 

    int waitKeyValue = 10; 
    cv::Mat san; 

    cv::VideoCapture san_cap(0); 
    if (san_cap.isOpened()) { 
     while (1) { 
      san_cap.read(san); 
      cv::imshow("gp", san); 
      int key = cv::waitKey(waitKeyValue); 
      if(key!=-1)cout<<key<<endl; 
      if (key == 27 || key == 1048586) { 
       if (waitKeyValue == 10)waitKeyValue = 0; 
       else waitKeyValue = 10; 
      } 
     } 
    } else cout << "videoCapture not working" << endl; 
    return 1; 

} 
+0

中加上if (cv :: waitKey(10)&255)== 27)'我希望每當我按** ENTER **鍵時視頻停止 – 2012-07-18 09:57:35

+0

我的答案(儘管未經測試)應該可以工作。 cv :: waitkEy返回一個整數,您可以檢查並使用它來再次設置waitKey本身。 – 2012-07-18 10:14:21

+0

我試過我們的代碼,但我沒有能夠按下** ENTER **鍵後停止視頻....你可以看到我對我的問題的評論,條件循環工作正常... thnx – 2012-07-18 10:31:02