Zapisywanie wideo OpenCV do pliku

Myślę, że moje pytanie jest dość proste, ale piszę ten kod w OpenCV, aby po prostu przechwycić dane wideo z kamery internetowej i zapisać je do pliku. Teraz problem polega na tym, że plik jest tworzony w żądanym miejscu docelowym, początkowo ma rozmiar około 286 bajtów. Następnie, gdy przypiszę pierwszą ramkę do wskaźnika, rozmiar wzrasta do 414 bajtów. Jednak po uruchomieniu całego kodu rozmiar zapisanego wideo pozostaje 414 bajtów. Oczywiście w rezultacie mój odtwarzacz multimedialny nie może odtworzyć pliku i mówi „nie ma formatu, który QuickTime Player rozumie”. to samo dzieje się z odtwarzaczem VLC.

Oto mój kod dla tego samego:

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>

int main( int argc, char** argv ) {
CvCapture* capture;

capture = cvCreateCameraCapture(0);

assert( capture != NULL );

IplImage* bgr_frame = cvQueryFrame( capture );

CvSize size = cvSize(
                     (int)cvGetCaptureProperty( capture,
                                               CV_CAP_PROP_FRAME_WIDTH),
                     (int)cvGetCaptureProperty( capture,
                                               CV_CAP_PROP_FRAME_HEIGHT)
                     );

cvNamedWindow( "Webcam", CV_WINDOW_AUTOSIZE );

CvVideoWriter *writer = cvCreateVideoWriter(    "/Users/user/Desktop/OpenCV_trial/OpenCV_trial/vidtry.AVI",
                                            CV_FOURCC('D','I','V','X'),
                                            30,
                                            size
                                            );

while( (bgr_frame = cvQueryFrame( capture )) != NULL ) 
{
    cvWriteFrame(writer, bgr_frame );
    cvShowImage( "Webcam", bgr_frame );
    char c = cvWaitKey( 33 );
    if( c == 27 ) break;
}
cvReleaseVideoWriter( &writer );
cvReleaseCapture( &capture );
cvDestroyWindow( "Webcam" );
return( 0 );
}

Nie wiem, dlaczego tak się dzieje. Używam mac OSX Lion i uruchomionego Xcode.

Czy ktoś wcześniej stanął przed tym problemem? Jeśli tak, jak mogę to rozwiązać?

Dziękuję Ci!

-Yash

questionAnswers(3)

yourAnswerToTheQuestion