我刚刚在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不为空。
希望有人从中受益:-)
编辑:我应该先读一下你的代码。我真傻,抱歉。这个问题似乎和我的很相似,所以我认为是一样的。