2015-11-02 269 views
0

我試圖用OpenCV 3.0捕獲視頻幀,但相機設備拒絕打開。當我打開設備0時,VideoCapture :: isOpened()返回false。我有一個iSight相機,它永遠不會打開。OpenCV VideoCapture無法在OSX上打開相機

我從命令行編譯而不是從XCode編譯。

我使用從逐字opencv.org的例子:

#include "opencv2/opencv.hpp" 

using namespace cv; 

int main(int, char**) 
{ 

    VideoCapture cap(0); // open the default camera 
    if(!cap.isOpened()) { // check if we succeeded 
     std::cout << "no capture device :(\n"; 
     return -1; 
    } 

    Mat edges; 
    namedWindow("edges",1); 
    for(;;) 
    { 
     Mat frame; 
     cap >> frame; // get a new frame from camera 
     cvtColor(frame, edges, COLOR_BGR2GRAY); 
     GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5); 
     Canny(edges, edges, 0, 30, 3); 
     imshow("edges", edges); 
     if(waitKey(30) >= 0) break; 
    } 
    // the camera will be deinitialized automatically in VideoCapture destructor 
    return 0; 
} 

我的CMakeLists.txt是:

cmake_minimum_required(VERSION 2.8) 
project(ocvtest) 
find_package(OpenCV REQUIRED) 
include_directories(${OpenCV_INCLUDE_DIRS}) 
add_executable(cap cap.cpp) 
target_link_libraries(cap ${OpenCV_LIBS}) 

我不知道如何進一步解決,似乎OpenCV的報價沒有線索 - 我不知道我可以查詢任何錯誤消息,甚至沒有查詢相機狀態或可用設備的方法。我甚至不確定OpenCV是否在我的機器上正確構建,以支持相機捕獲,並且我無法找到答案。 OpenCV只是默默地忽略了我打開攝像機的請求,並且據我所知,我期望讀者瞭解OpenCV是如何耿耿於懷的。

如何解決此問題?什麼會導致連接的相機無法打開?

+0

你是怎麼安裝'OpenCV'的?你用過「自制軟件」嗎?如果是,哪個版本和哪些選項? –

+0

@MarkSetchell,它是從源代碼下載並構建的。所有的選項都是默認的,除了我設置的一些額外的-WITH標誌(例如qt)。 – trbabb

回答

0

我不熟悉OSX,但在OpenCV中有一個問題,你可以用一個棘手的(而不是好的)方法克服它。 嘗試做出某種睡眠打開相機後:

VideoCapture cap(0); // open the default camera 
    SLEEP 1000 mSEC 
    if(!cap.isOpened()) { // check if we succeeded 
     std::cout << "no capture device :(\n"; 
     return -1; 
    } 

附:即使它有效,這也不是一個好的解決方案。嘗試找到問題並解決它。

+0

不知道SLEEP宏是從哪裏來的,但如果'休眠'5秒鐘,仍然沒有骰子。 – trbabb

+0

SLEEP是一個僞代碼:) 好吧,那麼你有另一個問題比相機延遲。祝你好運! –