5

私の質問はかなり基本的なものだと思いますが、このコードを OpenCV で記述して、ウェブカメラからビデオ データをキャプチャしてファイルに保存するだけです。ここでの問題は、ファイルが目的の宛先に作成されることです。最初のサイズは約 286 バイトです。次に、最初のフレームをポインターに割り当てると、サイズが 414 バイトに増加します。ただし、コード全体を実行すると、保存されたビデオのサイズは 414 バイトのままです。もちろん、その結果、私のメディア プレーヤーはファイルを再生できず、「QuickTime Player が理解できる形式ではありません」と表示されます。VLCプレーヤーでも同じことが起こります。

これが私のコードです:

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

なぜこれが起こっているのかわかりません。Mac OSX Lion を使用し、Xcode を実行しています。

誰もこの問題に直面したことがありますか? もしそうなら、どうすれば解決できますか?

ありがとうございました!

-ヤシュ

4

3 に答える 3

2

こんにちは、質問に対する答えを見つけたと思います。

Velthune が示唆したように、これはコーデックの問題のようで、MAC OS はそのうちのいくつかしか実行できません。動作するすべてのもののリンクは次のとおりです 。Mac OSポートでサポートされているQuickTimeコーデックのリスト

ただし、そこにリストされているすべてのコーデックが機能するわけではありません。私が試したすべてのもののうち、WRLEだけが機能しているように見えました.

ありがとうございます。-ヤシュ

于 2012-12-04T10:21:52.500 に答える
1

別のプレーヤーでファイルを開こうとしましたか? たとえば、VLC..

これは、Quicktime と .avi があまりうまくいかないためです。

アップルのドキュメントをご覧ください。

それ以外の場合は、ビデオ コーデックを変更してみてください。これは opencvリファレンスです。

于 2012-12-04T09:03:10.650 に答える
0

実際、私も同じことをしようとしていました。しかし、Windows 7 の Visual C++ (Express Edition) で試してみました。しかし、この場合は、"#include "stdafx.h" として追加のヘッダーを追加し、ファイルを保存するためのリンクが存在することを確認する必要があります。たとえば、私が修正したコードは次のとおりです。

#include "stdafx.h"
#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("D:/vidtry.AVI",CV_FOURCC('D','I','V','X'),15,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 );
}
于 2013-03-26T09:31:25.107 に答える