Невозможно осуществлять потоковую передачу с нескольких USB-камер (OV7725, OpenCV 3.1, Ubuntu 14.04)

Я пытаюсь создать массив из двух камер с использованием веб-камер на базе ELP USB OV7725: мини-веб-камера ELP 480P USB2.0 Цветной CMOS-датчик OmniVision OV7725 VGA USB-модуль камеры (https://www.amazon.co.uk/gp/product/B01DK0FPYC/ref=oh_aui_detailpage_o02_s00?ie=UTF8&PSC = 1). К сожалению, я не могу транслировать видео с более чем одной камеры ELP.

Исходный код выглядит следующим образом:

#include <opencv2/opencv.hpp>
#include "opencv2/calib3d.hpp"#include "opencv2/imgproc.hpp"#include "opencv2/imgcodecs.hpp"#include "opencv2/highgui.hpp"#include "opencv2/core/utility.hpp"#include "opencv2/ximgproc/disparity_filter.hpp"#include <iostream>
#include <string>

using namespace cv;
using namespace cv::ximgproc;
using namespace std;

int main()
{
//initialize and allocate memory to load the video stream from camera
cv::VideoCapture camera0(0);
cv::VideoCapture camera1(1);

if( !camera0.isOpened() ) return 1;
if( !camera1.isOpened() ) return 1;

camera0.set(CV_CAP_PROP_FRAME_WIDTH, 640);
camera0.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
camera1.set(CV_CAP_PROP_FRAME_WIDTH, 640);
camera1.set(CV_CAP_PROP_FRAME_HEIGHT, 480);

while(true) {
//grab and retrieve each frames of the video sequentially
cv::Mat3b frame0;
cv::Mat3b frame1;

camera0 >> frame0;
camera1 >> frame1;

// display results
cv::imshow("Video0", frame0);
cv::imshow("Video1", frame1);

int c = cv::waitKey(20);
//exit the loop if user press "Esc" key  (ASCII value of "Esc" is 27)
if(27 == char(c)) break;
}

return 0;
}

Вывод следующий:

VIDIOC_STREAMON: No space left on device
init done
opengl support available
OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /home/User/Data/Install/DevLibs/OpenCV/opencv/modules/highgui/src/window.cpp, line 289
terminate called after throwing an instance of 'cv::Exception'
what():  /home/User/Data/Install/DevLibs/OpenCV/opencv/modules/highgui/src/window.cpp:289: error: (-215) size.width>0 && size.height>0 in function imshow

Aborted (core dumped)

Используя слегка измененный исходный код, я могу одновременно передавать видео с двух веб-камер Logitech C920 + одной из них OV7725.

#include <opencv2/opencv.hpp>
#include "opencv2/calib3d.hpp"#include "opencv2/imgproc.hpp"#include "opencv2/imgcodecs.hpp"#include "opencv2/highgui.hpp"#include "opencv2/core/utility.hpp"#include "opencv2/ximgproc/disparity_filter.hpp"#include <iostream>
#include <string>

using namespace cv;
using namespace cv::ximgproc;
using namespace std;

int main()
{
//initialize and allocate memory to load the video stream from camera
cv::VideoCapture camera0(4);
cv::VideoCapture camera1(5);
cv::VideoCapture camera2(0);

if( !camera0.isOpened() ) return 1;
if( !camera1.isOpened() ) return 1;
if( !camera2.isOpened() ) return 1;

camera0.set(CV_CAP_PROP_FRAME_WIDTH, 640);
camera0.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
camera1.set(CV_CAP_PROP_FRAME_WIDTH, 640);
camera1.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
camera2.set(CV_CAP_PROP_FRAME_WIDTH, 640);
camera2.set(CV_CAP_PROP_FRAME_HEIGHT, 480);

while(true) {
//grab and retrieve each frames of the video sequentially
cv::Mat3b frame0;
cv::Mat3b frame1;
cv::Mat3b frame2;

camera0 >> frame0;
camera1 >> frame1;
camera2 >> frame2;

// display results
cv::imshow("Video0", frame0);
cv::imshow("Video1", frame1);
cv::imshow("Video2", frame2);

//wait for 40 milliseconds

int c = cv::waitKey(20);
//exit the loop if user press "Esc" key  (ASCII value of "Esc" is 27)
if(27 == char(c)) break;
}

return 0;
}

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

camera0.set(CV_CAP_PROP_FRAME_WIDTH, 240);
camera0.set(CV_CAP_PROP_FRAME_HEIGHT, 240);

или уменьшить FPS:

camera0.set(CV_CAP_PROP_FPS, 15);
camera1.set(CV_CAP_PROP_FPS, 15);

Однако это не помогло.

Камера поддерживает сжатый режим (Motion-JPEG):

$ v4l2-ctl -d /dev/video0 --list-formats
ioctl: VIDIOC_ENUM_FMT
Index       : 0
Type        : Video Capture
Pixel Format: 'YUYV'
Name        : YUYV 4:2:2

Index       : 1
Type        : Video Capture
Pixel Format: 'MJPG' (compressed)
Name        : Motion-JPEG

веб-камера работает в режиме MJPG:

codecCode = cap.get(CV_CAP_PROP_FOURCC);

Любые предложения, как решить эту проблему?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]