在Opencv中使用UYVY编解码器录制视频

时间:2017-10-06 12:05:13

标签: c++ video video-processing avi opencv3.3

我有来自e-con系统的相机,支持UYVU编解码器视频录制。当我使用他们自己的软件(QTCam)录制视频时,它以avi格式录制YUY2 Codec,视频打开并在VLC中完美运行。

enter image description here

现在我尝试通过Opencv VideoWrtiter()录制视频。 我使用此命令将Camera属性设置为读取UYVY Codec视频。

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);

来自相机的Feed正在工作,我使用imshow()进行了检查。但是,录制的视频不是在VLC播放,因为它适用于从QTCam录制的视频。

即使记录的重新编码的opencv也具有相同的编解码器

enter image description here

我的代码低于

#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或任何其他视频播放器中打开)

1 个答案:

答案 0 :(得分:5)

OpenCV似乎在向avi编写yuv422p格式时遇到问题。试试这个:

return false

这是一种yuv420p像素格式,这意味着您在垂直U和V平面上会失去一些精度,但它仍然是未压缩的视频。