JavaCV:OpenCVFrameGrabber没有启动

时间:2014-09-29 16:38:27

标签: javacv

简短版本:我的抓取器无法启动

我正在使用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)使用完全相同的代码可以正常工作。

如果您需要进一步的信息,请告诉我。

对不起我的英语,但非常感谢你的帮助!

2 个答案:

答案 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");