尝试使用Java在OpenCV中捕获网络摄像头时,我遇到了一个奇怪的问题。我正在使用来自https://github.com/master-atul/ImShow-Java-OpenCV的Imshow()方法,而我正在使用稍微更改的示例代码。问题是:我在尝试捕获时只得到最后一帧,前一帧是空白的,无论我在for循环中变量有多大。
在这个例子中,我应该在15秒内获得10帧,但是在15秒后我得到一帧。知道这个代码有什么问题吗?
如果我正在使用Highgui.imwrite()方法,我会在工作区文件夹中获得10个文件。
public class WebcamThread extends Thread{
public WebcamThread() {
capture();
}
private static void capture() {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
VideoCapture vcam = new VideoCapture(0);
Imshow im = new Imshow("Camera capture in OpenCV");
Mat m = new Mat();
vcam.set(Highgui.CV_CAP_PROP_FRAME_WIDTH, 800);
vcam.set(Highgui.CV_CAP_PROP_FRAME_HEIGHT, 600);
// loop until VideoCamera is Available
while (vcam.isOpened() == false);
System.out.println("Found webcam: " + vcam.toString());
// Bug Fix: Loop until initial image frames are empty
while (m.empty()) {
vcam.retrieve(m);
}
im.showImage(m);
for (int i=0; i<10; i++) {
vcam.retrieve(m);
System.out.println("Displaying " + i + " frame");
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}