我是Stackoverflow和OpenCV编程领域的新手。 我使用OpenCV Bindings for Java(opencv.org官员,而不是JavaCV)制作了一些项目,如通过ORB和SURF功能进行对象识别,处理图像。一切还好。 现在我正在转向视频流中的对象识别。我想从网络摄像头抓取流并应用对象识别。 我不是Java大师,所以我在OpenCV中找到了VideoCapture类,但是我无法从相机获取图片。OpenCV 2.4.4 Java - 抓取Webcam图片/流(OSX)
我在OSX Mountain Lion中使用OpenCV 2.4.4绑定在Eclipse中运行我的项目。
结果在控制台:
Hello, OpenCV
Camera OK?
Frame Obtained
Captured Frame Width 0
Invalid memory access of location 0x7fae00000000 rip=0x7fff8b4c5263
代码:
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;
import org.opencv.highgui.VideoCapture;
public class Webcam {
public static void main (String args[]){
System.out.println("Hello, OpenCV");
// Load the native library.
System.loadLibrary("opencv_java244");
VideoCapture camera = new VideoCapture(0);
camera.open(0); //Useless
if(!camera.isOpened()){
System.out.println("Camera Error");
}
else{
System.out.println("Camera OK?");
}
Mat frame = new Mat();
//camera.grab();
//System.out.println("Frame Grabbed");
//camera.retrieve(frame);
//System.out.println("Frame Decoded");
camera.read(frame);
System.out.println("Frame Obtained");
/* No difference
camera.release();
*/
System.out.println("Captured Frame Width " + frame.width());
Highgui.imwrite("camera.jpg", frame);
System.out.println("OK");
}
}
尝试编码图像作为巴纽。 – 2013-04-05 15:02:58
问题不在于图像格式。控制台显示图像宽度为0.将图像格式更改为PNG会将控制台中的最后一行更改为:“libpng警告:IHDR中的图像宽度为零”; “libpng警告:IHDR中图像高度为零”; “libpng错误:无效的IHDR数据”。 – 2013-04-05 21:46:37
已解决。问题只是相机需要时间进行初始化。我已经添加了“Thread.sleep(1000);” “视频捕捉摄像头=新的视频捕捉(0)后”。 – 2013-04-11 10:39:01