简短版本:我的抓取器无法启动
我正在使用Netbeans IDE 8.0,Java JDK和javacv。
我的问题是,我在两台相机之间切换。一个来自我的机器人,我用“IPCameraFrameGrabber(”......“)访问它。这部分工作正常,但出于调试(和移动性)的目的,我想用我的笔记本电脑相机测试代码(OpenCVFrameGrabber(0)或(-1)...同时测试两个,结果相同)。但似乎是grabber.start();没有启动。
我使用以下代码(简化但我认为基础知识包括在内,是吗?)
import com.googlecode.javacv.CanvasFrame;
import com.googlecode.javacv.FrameGrabber;
import com.googlecode.javacv.OpenCVFrameGrabber;
import com.googlecode.javacv.cpp.opencv_core;
import com.googlecode.javacv.cpp.opencv_core.IplImage;
import static com.googlecode.javacv.cpp.opencv_core.cvReleaseImage;
public class Simple_camera_test {
IplImage imgBin;
static IplImage imgGrab;
public static void main(String[] args) {
try{
OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
System.out.println("Cam check");
grabber.start();
System.out.println("grabber started");
imgGrab = grabber.grab();
CanvasFrame canvasFrame2 = new CanvasFrame("Cam2");
canvasFrame2.setCanvasSize(imgGrab.width(), imgGrab.height());
//canvasFrame2.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
grabber.setFrameRate(30);
while ((imgGrab = grabber.grab()) != null){
canvasFrame2.showImage(imgGrab);
cvReleaseImage(imgGrab);
}
grabber.stop();
canvasFrame2.dispose();
}catch (Exception e) {
e.printStackTrace();
}
}
}
当我运行代码时,它会打印出“Cam check”并且cameralight开始发光,但接下来的2-3分钟没有任何反应。之后输出为:
run:
Cam check
(after 2-3 min pause - exception handling)
grabber started
com.googlecode.javacv.FrameGrabber$Exception: cvRetrieveFrame() Error: Could not retrieve frame. (Has start() been called?)
at com.googlecode.javacv.OpenCVFrameGrabber.grab(OpenCVFrameGrabber.java:236)
at simple_camera_test.Simple_camera_test.main(Simple_camera_test.java:29)
所以对我来说,问题是“抓取器没有”启动,但直到现在我还无法启动它。也许我的假设总体上是错误的......任何人都可以帮我解决这个问题吗?如上所述,IPCameraFrameGrabber(robot-ip)使用完全相同的代码可以正常工作。
如果您需要进一步的信息,请告诉我。
对不起我的英语,但非常感谢你的帮助!
答案 0 :(得分:0)
我发现这是相机问题。在另一台笔记本电脑上我的代码工作正常,但如果有人有提示,我怎么能让我的相机恢复工作,这也会很好!
它是联想扭曲64位,win8.1的集成摄像头,问题是:如果启动(由于程序代码或类似skype的程序),绿灯会亮起,但不会出现图像。 我已经尝试过lenovo设置(凸轮不是私有),新驱动程序,取消重新安装。
我真的不希望得到答案,但如果有人在此之前巧合地遇到过此问题而且有解决方案,请告诉我们!它可以节省我一些时间:))
答案 1 :(得分:0)
试试这个:
CvCapture capture = cvCreateCameraCapture(CV_CAP_ANY);
IplImage frame= cvQueryFrame(capture);
cvNamedWindow("Video",CV_WINDOW_AUTOSIZE);
char c = 0;
while( c!=27 && frame!=null;) {
frame= cvQueryFrame(capture);
cvShowImage("Video", frame);
c= (char )cvWaitKey(30);
}
cvReleaseCapture(capture);
cvDestroyWindow("Video");