2013-07-21 87 views
0

我剛剛在我的mac air上通過我的第一次opencv安裝,我一直試圖從內置在屏幕上的相機輸入輸入。據我所知,我有正確運行在Eclipse中的庫,因爲我每次嘗試調用任何方法時都不會發生大量錯誤。然而,現在發生的情況是網絡攝像頭出現問題,這看起來是正確創建的,傳遞給構造函數的值爲0(1-50返回任何內容,-1相信是默認值)。但是當我嘗試用它來取回框架時,墊子總是空的。OpenCV- Webcam框架不能在Java中的macbook上工作

據我所知,看起來我能夠訪問攝像頭,但是在代碼之間會出現某種斷開,並且能夠實際激活攝像頭以拍攝視頻。如果它很重要,則表示大多數節目的攝像機處於活動狀態的燈一直保持不活動狀態。

相關的代碼在下面發佈。我將非常感謝您可能擁有的任何洞察力,或者在java中使用代碼從Java攝像頭中獲取圖像的示例。謝謝!

System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 

    VideoCapture camera = new VideoCapture(0); 
    try { 
     Thread.sleep(1000); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 


    //camera.open(0); //Useless 
    if(!camera.isOpened()){ 
     System.out.println("Camera broken"); 
    } 
    else{ 
     System.out.println("Camera OK!"); 
    } 

    Mat frame = new Mat(); 

    camera.read(frame); 

    System.out.println("width:" + frame.width()); 

    Highgui.imwrite("myframe.png", frame); 

輸出是:

Camera OK! 
width:0 
libpng warning: Image width is zero in IHDR 
libpng warning: Image height is zero in IHDR 
libpng error: Invalid IHDR data 
Cleaned up camera. 
+0

我在Windows和Linux上有類似的東西,我所要做的就是改變'VideoCapture'調用的索引。你說從1-50的指數什麼都不會返回。你能說出究竟發生了什麼嗎?我注意到,有時我需要使用相機關閉所有其他程序,以前沒有工作的程序纔有效。 –

+0

嗯,我會給你一個鏡頭,並嘗試重新啓動一切,並嘗試從頭開始運行,這將不得不等待直到今晚。當我試圖打開0-50,然後檢查是否camera.isopen(),它返回沒有但0插槽被打開。所以我認爲其他人是保留有其他相機,這是有道理的。我不應該說我運行了一些運行https://github.com/sarxos/webcam-capture的軟件,它可以讓我找回一張圖片,但是它的質量很差,我真的很想將它保留在openCV中。 – Ness

+0

是的,openCV已經不是很直接,所以在頂部添加更多的庫可能沒有幫助:P我從來沒有在java中使用過openCV,但我可以在python中給你寫一段代碼,它將通過所有相機並嘗試拍照,也許你可以在那裏工作,並用java重現它。但是請儘量關閉所有東西並重新啓動,它可能就像我這樣做:D –

回答

0

它已經有一段時間,因爲這個問題被問過,但因爲我有基本相同的問題,我將發佈的解決方案(發現here)(這是一個相當簡單修復實際上是一個愚蠢的問題):

相機需要時間來初始化(不知道什麼樣的硬件細節,但你去)。爲了解決它,我只是添加Thread.sleep(1000),並開始工作。稍微好一點的修復可能是將其封裝在一個循環中,該循環每隔1000ms重試一次,直到返回的Mat不爲空。

希望有人從這個:-)受益

編輯:我應該先閱讀你的代碼。愚蠢的我,道歉。這個問題與我的看法非常相似,所以我認爲它是一樣的。