2011-11-14 1 views
0

OpenCV (C++)를 사용하여 비디오 파일을 작성하고 싶습니다. 문서를 보면 정말 단순 해 보였습니다. 그러나, 내 프로그램 (Windows 7에서 실행)에서 그것을 시도 할 때, 나는 그것을 할 수 없었다.OpenCV로 비디오를 녹화하지 못했지만 오류가 발생하지 않았습니다.

인터넷에서 잠재적 인 문제를 검색 할 때 2.x OpenCV 인터페이스 나 내 문제와 관련된 것을 사용하는 예를 찾을 수 없습니다. 여기에 첫 번째

코드입니다 :

cv::VideoCapture cap("C:\\Users\\Me\\Video\\test.mov"); 

cv::VideoWriter writer("C:\\Users\\Me\\Video\\test_result.mov", 
          cap.get(CV_CAP_PROP_FOURCC), 
          cap.get(CV_CAP_PROP_FPS), 
          cv::Size((int)cap.get(CV_CAP_PROP_FRAME_HEIGHT), (int)cap.get(CV_CAP_PROP_FRAME_WIDTH))); 

while(cap.grab()) { 
    cv::Mat img; 
    cap.retrieve(img); 

    // process img 

    writer << img; 
} 

이 오류 메시지가 주어지지 않고 비디오 파일이 생성되지 않습니다. 설상가상으로, 다음과 같은 메시지가 콘솔에 나타납니다

Output #0, mov, to 'C:\Users\Me\Video\teste_result.mov': 
Stream #0.0: Video: [0][0][0][0]/0x0000, yuv420p, 480x720, q=2-31, 22118 kb/s, 90k tbn, 15 tbc 

그 비디오 파일이 생성되는 것을 의미하지 않나요? 가능한 오류를 찾을 수있는 곳은 어디입니까?

편집 : VideoCapture 및 VideoWriter 확인을가는 isOpened 방법, 개체 경우

위의 코드를 사용하여, 나는 또한 확인.

답변

1

FOURCC, FPS 및 프레임 크기 필드를 수동으로 구성 해 보았습니까? 이 같은

뭔가 :

cv::VideoWriter writer("C:\\Users\\Me\\Video\\test_result.mov", 
         CV_FOURCC('M','J','P','G'), 
         30, 
         Size(720, 480), 
         true); 

은 출력 무엇을합니까? 경우에 따라 get(CV_*)이 유효한 데이터를 반환하지 않습니다. 당신은 아마 그들이 올바른 정보를 반환하고 있는지 확인하기를 원할 것입니다.

편집 : 또한 (높이, 너비) 튜플을 사용하여 크기 개체를 만드는 것으로 나타났습니다. CvSize 생성자의 예상 순서이므로이 너비 (높이, 너비)로 바꿔야합니다.

0

오류 메시지가주어지지 않고 당신은 또한 VideoCapture의 성공과 VideoWriter 확인 하지 있습니다

cv::VideoCapture cap("C:\\Users\\Me\\Video\\test.mov"); 
if (!cap.isOpened()) // check if we succeeded 
{ 
    // print error message 
} 


cv::VideoWriter writer("C:\\Users\\Me\\Video\\test_result.mov", 
          cap.get(CV_CAP_PROP_FOURCC), 
          cap.get(CV_CAP_PROP_FPS), 
          cv::Size((int)cap.get(CV_CAP_PROP_FRAME_HEIGHT), (int)cap.get(CV_CAP_PROP_FRAME_WIDTH))); 

if (!writer.isOpened()) // check if we succeeded 
{ 
    // print error message 
} 

을 이러한 검사를 수행하고 당신은 더 많은 정보를 가지고 있습니다 무엇을 실패하는 이유 .

+0

죄송합니다. 작성을 잊어 버렸지 만 코드에서 수행했습니다. 그냥 질문을 편집했습니다. – Renan