OpenCV 2.4.4 Java – 抓取网络摄像头图片/流(OSX)

我是Stackoverflow和OpenCV编程领域的新手。 我用OpenCV Bindings for Java(opencv.org官员,而不是JavaCV)制作了一些项目,比如通过ORB和SURFfunction进行对象识别,处理图像。 一切还好。 现在我正在转向video流中的对象识别。 我想从网络摄像头抓取流并应用对象识别。 我不是Java大师,所以我在OpenCV中找到了VideoCapture类,但是我无法从相机中获取图片。

我在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"); } } 

问题只是相机需要时间来初始化。 我已经添加

 Thread.sleep(1000); 

 VideoCapture camera = new VideoCapture(0); 

我在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项目中的用户库

更换
System.loadLibrary("opencv_java244");

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);