Я пытаюсь получить изображение с веб-камеры, следуя инструкциям из этой книги: Создание проектов 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
Любой совет?