0

我刚刚在我的 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.
4

1 回答 1

0

自从提出这个问题以来已经有一段时间了,但是由于我基本上遇到了同样的问题,所以我将发布一个解决方案(在此处找到)(实际上这是一个相当简单的解决方案,适用于一个愚蠢的问题):

相机需要时间来初始化(不知道血腥的硬件细节是什么,但你去吧)。为了修复它,我简单地添加了 Thread.sleep(1000),它就开始工作了。更好的解决方法可能是将其包装在一个循环中,该循环每 1000 毫秒左右重试一次,直到返回的 Mat 不为空。

希望有人从中受益:-)

编辑:我应该先阅读您的代码。愚蠢的我,道歉。这个问题看起来和我的很相似,所以我认为它是一样的。

于 2013-11-18T00:31:03.657 回答