2017-10-06 86 views
5

私はUYVUコーデックビデオ録画をサポートするe-conシステムのカメラを持っています。ビデオを録画するために自分のソフトウェア(QTCam)を使うと、ビデオはYUY2コーデックでaviフォーマットで記録されます。これはビデオがVLCで完全に開きます。今OpenCvのUYVYコーデックでビデオを録画

enter image description here

I)は、(OpenCVのVideoWrtiterを介してビデオを録画しようとしました。 このコマンドを使用して、UYVYコーデックビデオを読み込むためにCameraプロパティを設定しました。

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()でチェックしました。しかし、録画されたビデオは、QTCamから録画されたものと同じようにVLCで再生されていません。記録

でも録画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; 

}

下回る

enter image description here

私が間違っているつもりだところを教えてください。私はカメラからの非圧縮ビデオを録画し、それをビデオファイル(VLCまたは他のビデオプレーヤーで開く)として保存します。

+0

私がこれを理解しているかわかりませんが、私はビデオに関するエキスパートです。あなたは 'UYVY'データを読み込んでいて、まったく同じ変更されていないデータを書き、突然それが' YUY2'だと主張しているようです...? –

+0

実際、私はUYVYデータを読んでいて、UYVYを使って、またYUV2コーデックを使って、Aviファイルに書き込んでいます。どちらも同じ結果をもたらしました。どのメディアプレーヤーでも再生されません。 –

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

これは、あなたが垂直UとV面でいくつかの精度を失うことを意味YUV420Pピクセルフォーマット、であるが、それはまだ非圧縮ビデオになります。代わりにこれを試してみてください。

関連する問題