2017-10-06 108 views
5

我有一个支持UYVU编解码器视频录制的e-con系统的相机。当我使用自己的软件(QTCam)录制视频时,它会使用YUY2编解码器以avi格式录制视频,该视频将在VLC中完美显示并运行。在Opencv的UYVY编解码器中录制视频

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

来自相机的信息正在工作,我用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或任何其他视频播放器中打开)

+0

不知道如果我明白这一点 - 但我不是视频专家。你似乎在阅读“UYVY”数据并写出完全相同的未经修改的数据,并突然声称它是'YUY2' ...? –

+0

实际上,我正在阅读UYVY数据并使用UYVY编写Avi文件,并使用YUV2编解码器。两者都给出了相同的结果。它不在任何媒体播放器上播放。 –

+0

我会先检查一下CAP_PROP_FORMAT和CAP_PROP_CONVERT_RGB的设置。 – zeFrenchy

回答

5

OpenCV似乎有将yuv422p格式写入avi的问题。试试这个:

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

这是一个YUV420P像素格式,这意味着你失去了在垂直U和V平面部分精密,但它仍然是未压缩的视频。