2017-10-06 27 views
5

저는 UYVU 코덱 비디오 레코딩을 지원하는 e-con 시스템의 카메라를 가지고 있습니다. 비디오를 녹화하기 위해 자신의 소프트웨어 (QTCam)를 사용하면 YUY2 코덱을 사용하여 avi 형식으로 비디오를 녹화하고 VLC에서 완벽하게 실행합니다. Opencv의 UYVY 코덱에 비디오 녹화하기

enter image description here

지금 내가 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 픽셀 형식이지만, 여전히 비 압축 비디오가 될 것입니다 : 대신 사용해보십시오.