我的代码在这里。我正在使用Andrew Davison博士的代码
private IplImage picGrab(FrameGrabber grabber, int ID) {
IplImage im = null;
try {
FrameRecorder rec = FrameRecorder.createDefault("vid.avi", 240, 360);
rec.setVideoCodec(CV_FOURCC('M', 'J', 'P', 'G'));
rec.setVideoBitrate(16);
rec.setFrameRate(25);
rec.setFormat("avi");
rec.setPixelFormat(1);
rec.start();
im = grabber.grab();
// take a snap
// cvSaveImage("capture"+captureNo+".jpg", im);
rec.record(im);
} catch (Exception e) {
e.printStackTrace();
System.out.println("Problem grabbing image for camera " + ID);
}
return im;
}
并发生异常。
com.googlecode.javacv.FrameRecorder$Exception: cvWriteFrame(): Could not record frame
Problem grabbing image for camera 0
Initializing OpenCV motion detector...
at com.googlecode.javacv.OpenCVFrameRecorder.record(OpenCVFrameRecorder.java:91)
at photocapture.MotionPanel.picGrab(MotionPanel.java:181)
at photocapture.MotionPanel.run(MotionPanel.java:100)
at java.lang.Thread.run(Thread.java:744)
答案 0 :(得分:0)
检查您的默认帧大小。当默认帧大小小于设置的帧大小时,我通常会收到此错误
答案 1 :(得分:0)
您需要确保FrameGrabber
有效。错误消息是设置它可能失败的线索。
错误消息通知您执行了以下操作:
FrameGrabber grabber = new OpenCVFrameGrabber(0);
但设备0不是您的相机。
在方法的开头,你应该添加一个安全检查:
private IplImage picGrab(FrameGrabber grabber, int ID) {
if (grabber == null)
{
System.out.println("!!! Bad OpenCVFrameGrabber");
return null;
}
// ...