JavaCV: OpenCVFrameGrabber не запускается

короткая версия: мой граббер не запускается

Я использую 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», и камера начинает светиться, но затем в течение следующих 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) отлично работает с точно таким же кодом.

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

Извините за мой английский, но большое спасибо за вашу помощь!


person jfmi    schedule 29.09.2014    source источник


Ответы (2)


Я понял, что дело в камере. На другом ноутбуке мой код работает нормально, но если у кого-нибудь есть подсказка, как я могу вернуть свою камеру к работе, это тоже было бы неплохо!

Это встроенная камера lenovo Twist 64bit, Win8.1, и проблема в том, что при запуске (из-за программного кода или таких программ, как Skype) горит зеленый свет, но изображение не появляется. Я уже пробовал настройки леново (камера не на привате), новые драйвера, де- и переустановку.

Я действительно не ожидаю ответа на этот вопрос, но если у кого-то случайно была эта проблема раньше и есть решение, пожалуйста, дайте мне знать! Это может сэкономить мне время :)

person jfmi    schedule 30.09.2014

Попробуй это:

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");
person Ernesto L. Garcia Pinal    schedule 16.03.2015