5

我是 Stackoverflow 和 OpenCV 编程领域的新手。我已经使用 OpenCV Bindings for Java(opencv.org 官方,而不是 JavaCV)制作了一些项目,例如通过 ORB 和 SURF 功能进行对象识别,处理图像。一切都好。现在我正在转向视频流中的对象识别。我想从网络摄像头中获取流并应用对象识别。我不是 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");
    }
}
4

3 回答 3

8

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

Thread.sleep(1000);

VideoCapture camera = new VideoCapture(0);
于 2013-06-19T10:22:52.483 回答
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 项目中的用户库

于 2014-03-28T06:25:44.880 回答
3

替换
System.loadLibrary("opencv_java244");

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

于 2015-06-20T06:15:11.803 回答