我刚刚在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.
答案 0 :(得分:0)
相机需要时间来初始化(不确定血腥硬件的细节是什么,但是你去了)。要修复它,我只需添加Thread.sleep(1000),它就开始工作了。稍微好一点的修复方法可能是将它包装在循环中,每循环重试1000次左右,直到返回的Mat不为空。
希望有人从中受益: - )
编辑:我应该先读你的代码。傻傻的,道歉。问题看起来和我的非常相似,所以我认为它是一样的。