2013-04-05 31 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);