2013-04-05 29 views
5

我是Stackoverflow和OpenCV編程領域的新手。 我使用OpenCV Bindings for Java(opencv.org官員,而不是JavaCV)製作了一些項目,如通過ORB和SURF功能進行對象識別,處理圖像。一切還好。 現在我正在轉向視頻流中的對象識別。我想從網絡攝像頭抓取流並應用對象識別。 我不是Java大師,所以我在OpenCV中找到了VideoCapture類,但是我無法從相機獲取圖片。OpenCV 2.4.4 Java - 抓取Webcam圖片/流(OSX)

我在OSX Mountain Lion中使用OpenCV 2.4.4綁定在Eclipse中運行我的項目。

結果在控制檯:

Hello, OpenCV 
Camera OK? 
Frame Obtained 
Captured Frame Width 0 
Invalid memory access of location 0x7fae00000000 rip=0x7fff8b4c5263 

代碼:

import org.opencv.core.Mat; 
import org.opencv.highgui.Highgui; 
import org.opencv.highgui.VideoCapture; 

public class Webcam { 

    public static void main (String args[]){ 

    System.out.println("Hello, OpenCV"); 
    // Load the native library. 
    System.loadLibrary("opencv_java244"); 

    VideoCapture camera = new VideoCapture(0); 
    camera.open(0); //Useless 
    if(!camera.isOpened()){ 
     System.out.println("Camera Error"); 
    } 
    else{ 
     System.out.println("Camera OK?"); 
    } 

    Mat frame = new Mat(); 

    //camera.grab(); 
    //System.out.println("Frame Grabbed"); 
    //camera.retrieve(frame); 
    //System.out.println("Frame Decoded"); 

    camera.read(frame); 
    System.out.println("Frame Obtained"); 

    /* No difference 
    camera.release(); 
    */ 

    System.out.println("Captured Frame Width " + frame.width()); 

    Highgui.imwrite("camera.jpg", frame); 
    System.out.println("OK"); 
    } 
} 
+0

嘗試編碼圖像作爲巴紐。 – 2013-04-05 15:02:58

+0

問題不在於圖像格式。控制檯顯示圖像寬度爲0.將圖像格式更改爲PNG會將控制檯中的最後一行更改爲:「libpng警告:IHDR中的圖像寬度爲零」; 「libpng警告:IHDR中圖像高度爲零」; 「libpng錯誤:無效的IHDR數據」。 – 2013-04-05 21:46:37

+1

已解決。問題只是相機需要時間進行初始化。我已經添加了「Thread.sleep(1000);」 「視頻捕捉攝像頭=新的視頻捕捉(0)後」。 – 2013-04-11 10:39:01

回答

7

的問題只是該相機需要時間來初始化。我已經添加

Thread.sleep(1000); 

VideoCapture camera = new VideoCapture(0); 
3

我試着在MacOS上這個代碼,並發現了另一個錯誤。

System.loadLibrary("opencv_java244"); 

上面一行返回該錯誤

java.lang.UnsatisfiedLinkError: org.opencv.highgui.VideoCapture.VideoCapture_2(I)J 

爲了克服它,我取代了符合這一

System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 

和代碼工作!

我使用的OpenCV 2.4.8,包括其作爲用戶庫在我的Eclipse項目

+0

對於其他人:我也有一些與UnsatisfiedLinkError有關的問題。我錯過了將用戶庫的'Native library location'設置爲'/lib'的步驟。希望這可以幫助某人。 – Christof 2014-05-01 20:24:57

3

更換
System.loadLibrary("opencv_java244");

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);