Интеграция веб-камеры с OpenCV и OpenGL с использованием C ++ в Ubuntu? - PullRequest
2 голосов
/ 24 марта 2020

Я пытаюсь получить изображение с веб-камеры, следуя инструкциям из этой книги: Создание проектов Computer Vision с OpenCV 4 и C ++ (2019) . Я обновил строгий код, следуя документации OpenCV 4.2.0 , чтобы использовать VideoCapture для захвата. Для простоты я приведу здесь только код, связанный с вызовом камеры:

#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/videoio.hpp"

#include <iostream>
#include <string>
#include <sstream>
#include <GL/glut.h>
using namespace cv;
using namespace std;

Mat frame;
GLfloat angle = 0.0;
GLuint texture;
VideoCapture camera;

int main(int argc, const char** argv){
    int deviceID = 2;  
    int apiID = 0;
    camera.open(deviceID + apiID);

    if (!camera.isOpened())
        {
            cout << "ERROR : Can't open camera" << endl;
            return -1;
        }

    namedWindow("OpenGL Camera", WINDOW_OPENGL); 
    glEnable(GL_TEXTURE_2D);
    glGenTextures(1, &texture);
    setOpenGlDrawCallback("OpenGL Camera", on_opengl);

    while(waitKey(30) !='q'){
        camera >> frame;
        loadTexture();
        updateWindow("OpenGL Camera");
        angle = angle+4;
    }

    destroyWindow("OpenGL Camera");
    return 0;
}

Вот полный код в gist . Я столкнулся с этой ошибкой:

[ WARN:0] global /home/raisa/Documents/OpenCV/opencv-4.2.0_source/modules/videoio/src/cap_gstreamer.cpp (935) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1

Я использую камеру 2 (внешняя веб-камера - Logitech C930e), которая была протестирована ранее и отлично работает на Ubuntu. Я установил его как камеру по умолчанию для guvcview и Cheese без проблем. Но даже когда я пытался использовать Camera 0 (встроенную веб-камеру), я все еще сталкивался с той же самой проблемой, которая заставляла меня думать, что это не проблема с камерой, а проблема с кодированием.

Я сталкивался с этим вопросом: Захват 1080p при 30 кадрах в секунду от Logitech C920 с openCV 2.4.3 , который также использует камеру Logitech, но использует очень старую версию OpenCV (2.4.3), в любом случае я попытался реализовать его / ее подход, используя это:

camera.open(2, CAP_DSHOW);
camera.set(CAP_PROP_FRAME_WIDTH, 1920);
camera.set(CAP_PROP_FRAME_HEIGHT, 1080);

Нет ошибок, но у меня только черный экран. Я подумал, что может потребоваться больше времени для загрузки, поэтому я также попытался увеличить waitKey до waitKey(300), но по-прежнему черный экран.

Здесь также возникает та же проблема: Отображение изображения из Веб-камера использует openCV и openGL , но использует Modern OpenGL, которым я сейчас не пользуюсь, так как я следую конкретному учебнику c из книги. Если эта информация поможет, я компилирую с CMake в терминале Ubuntu, что я установил на свою машину:

Ubuntu 18.04.4 LTS
OpenCV version : 4.2.0
OpenGL version : 4.6 (Compatibility Profile) Mesa 20.1.0-devel 
Cmake version  : 3.10.2

Любой совет?

...