【问题标题】:OpenCV 2.4.4 Java - Grab Webcam picture/stream (OSX)OpenCV 2.4.4 Java - 抓取网络摄像头图片/流(OSX)
【发布时间】:2013-04-05 13:37:25
【问题描述】:

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

我在 Eclipse 中使用 OpenCV 2.4.4 绑定在 OSX Mountain Lion 中运行我的项目。

控制台中的结果:

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

【问题讨论】:

  • 尝试将图像编码为.png。
  • 问题不在图片格式。控制台显示图像宽度为 0。将图像格式更改为 PNG 会将控制台中的最后一行更改为:“libpng 警告:IHDR 中的图像宽度为零”; “libpng 警告:IHDR 中的图像高度为零”; “libpng 错误:IHDR 数据无效”。
  • 已解决。问题只是相机需要时间来初始化。我添加了“Thread.sleep(1000);”在“VideoCapture camera = new VideoCapture(0);”之后。
  • 既然您找到了解决方案,请将其作为答案发布。
  • 我从我的网络摄像头得到一个全黑的图像。网络摄像头显示它已打开。但是检查图像它在图像中什么都没有你能帮忙吗?

标签: java macos opencv webcam


【解决方案1】:

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

Thread.sleep(1000);

之后

VideoCapture camera = new VideoCapture(0);

【讨论】:

    【解决方案2】:

    我在 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 项目中

    【讨论】:

    • 对于其他人:我也遇到了 UnsatisfiedLinkError 的一些问题。我错过了将用户库的“本机库位置”设置为“/lib”的步骤。希望这对某人有所帮助。
    【解决方案3】:

    替换
    System.loadLibrary("opencv_java244");

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

    【讨论】:

      猜你喜欢
      • 2012-06-16
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-26
      相关资源
      最近更新 更多