OpenCV-网络摄像头框架不适用于Java中的macbook



我刚刚在mac-air上完成了opencv的第一次安装,我一直在尝试从内置在屏幕上的相机中获得输入。据我所知,我已经正确地在Eclipse中运行了库,因为我不再每次尝试调用任何方法时都会出现大量错误。然而,现在发生的是网络摄像头的问题,它似乎是正确创建的,0被传递给构造函数(1-50中没有其他任何东西返回,我认为-1是默认值)。但是当我试着用它把相框拿回来的时候,垫子总是空的。

据我所知,我似乎可以访问相机,但代码和实际激活相机拍摄视频之间存在某种脱节。如果这很重要的话,对于大多数程序,显示相机处于活动状态的灯光始终保持不活动状态。

相关代码发布在下面。我非常感谢您的任何见解或在java中工作的代码示例,以便从网络摄像头中获取图像,在java gui中使用。谢谢

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    VideoCapture camera = new VideoCapture(0);
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    //camera.open(0); //Useless
    if(!camera.isOpened()){
        System.out.println("Camera broken");
    }
    else{
        System.out.println("Camera OK!");
    }
    Mat frame = new Mat();
    camera.read(frame);
    System.out.println("width:" + frame.width());
    Highgui.imwrite("myframe.png", frame);

输出为:

Camera OK!
width:0
libpng warning: Image width is zero in IHDR
libpng warning: Image height is zero in IHDR
libpng error: Invalid IHDR data
Cleaned up camera.

这个问题被问到已经有一段时间了,但由于我基本上有同样的问题,我将发布一个解决方案(在这里找到)(这实际上是一个相当简单的解决愚蠢问题的方法):

相机需要时间来初始化(不确定血腥的硬件细节是什么,但你可以做到)。为了修复它,我简单地添加了Thread.sleep(1000),它就开始工作了。一个稍微好一点的解决方案可能是将其封装在一个循环中,该循环每隔1000ms左右重试一次,直到返回的Mat不为空。

希望有人从中受益:-)

编辑:我应该先读一下你的代码。我真傻,抱歉。这个问题似乎和我的很相似,所以我认为是一样的。

最新更新