[英]OpenCV- Webcam frame not working on macbook in Java
我刚刚在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不为空。
希望有人从中受益:-)
编辑:我应该先阅读您的代码。 愚蠢的我,抱歉。 这个问题似乎与我的非常相似,所以我认为它是相同的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.