Запись видео в кодеке UYVY в Opencv

У меня есть камера от систем e-con, которая поддерживает запись видео кодека UYVU. Когда я использую их собственное программное обеспечение (QTCam) для записи видео, оно записывает в формате avi с кодеком YUY2, которое видео открывается и прекрасно работает в VLC.

введите описание изображения здесь

Теперь я попытался записать видео через Opencv VideoWrtiter ().
Я использовал эту команду, чтобы установить свойство Camera для чтения видео кодека UYVY.

camera1.set(CV_CAP_PROP_FOURCC,CV_FOURCC('U','Y','V','Y'));

а также использовал VideoWriter для записи видео в формате файла AVI.

video1.open("/home/camera1UYVY.avi",CV_FOURCC('Y','U','Y','2'),30,s1,true);

Подача с камеры работает, я проверил с помощью imshow (). Но записанное видео не воспроизводится в VLC, поскольку оно работает для того, которое было записано с QTCam.

Даже перекодированная запись OpenCV имеет тот же кодек

введите описание изображения здесь

Мой код идет ниже

#include <opencv2/core/core.hpp>
#include <opencv2/video/video.hpp>
#include <opencv2/imgcodecs/imgcodecs.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/videoio/videoio.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char **argv) {

VideoCapture camera1;
Mat frame1;

camera1.open(0);

camera1.set(CV_CAP_PROP_FOURCC,CV_FOURCC('U','Y','V','Y'));camera1.set(CV_CAP_PROP_FRAME_WIDTH,1280);
camera1.set(CV_CAP_PROP_FRAME_HEIGHT,720);cout << "FPS:" << camera1.get(CV_CAP_PROP_FPS) << endl;

camera1.set(CV_CAP_PROP_FPS,30);

cout << "FPS:" << camera1.get(CV_CAP_PROP_FPS) << endl;

cout << "Camera -1 Codec: " << (int)camera1.get(CV_CAP_PROP_FOURCC) << endl;VideoWriter video1;

cout << camera1.get(CV_CAP_PROP_FRAME_WIDTH) << endl;
cout << camera1.get(CV_CAP_PROP_FRAME_HEIGHT) << endl;
Size s1 = Size((int)camera1.get(CV_CAP_PROP_FRAME_WIDTH),(int)camera1.get(CV_CAP_PROP_FRAME_HEIGHT));video1.open("/home/camera1UYVY.avi",CV_FOURCC('Y','U','Y','2'),30,s1,true);while(!camera1.isOpened()){
cout << "Camera not opened" << endl;
continue;
}
while(1){

if(!video1.isOpened()){
cout << "Error opening video" << endl;
}
camera1.read(frame1);
imshow("Display1",frame1);
video1.write(frame1);
cout << frame1.data << endl;
if(waitKey(1) == 27){
break;
}
}
video1.release();
camera1.release();
return 0;

}
пожалуйста, скажите мне, где я иду не так. Я хочу записать несжатое видео с камеры и сохранить его в виде видеофайла (который открывается в VLC или любом другом видеоплеере)

6

Решение

У OpenCV, похоже, есть проблема с записью форматов yuv422p в avi. Попробуйте это вместо этого:

video1.open("/home/camera1UYVY.avi",CV_FOURCC('I', 'Y', 'U', 'V'),30,s1,true);

Это пиксельный формат yuv420p, что означает, что вы теряете некоторую точность в вертикальных плоскостях U и V, но это все равно будет несжатое видео.

5

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

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

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