1

OpenCVブックのチュートリアルに従っていますが、次のコードが機能しません。

#include <iostream>
#include <opencv/cv.h>
#include <opencv/highgui.h>
using namespace std;

int main() {
    string arg1 = "new.mov";
    string arg2 = "mov.mov";
    CvCapture* capture = 0;
    capture = cvCreateFileCapture(arg1.c_str());
    if(!capture){
        return -1;
    }
    IplImage *bgr_frame=cvQueryFrame(capture);
    double fps = cvGetCaptureProperty (
            capture,
            CV_CAP_PROP_FPS
    );
    CvSize size = cvSize(
            (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH),
            (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH)
    );
    CvVideoWriter* writer = cvCreateVideoWriter(
        arg2.c_str(),
        CV_FOURCC('N', 'T', 'S', 'C'),
        fps,
        size
    );
    IplImage* logpolar_frame = cvCreateImage(
            size,
            IPL_DEPTH_8U,
            3
    );
    while((bgr_frame=cvQueryFrame(capture)) != NULL){
        cvLogPolar(
                bgr_frame, logpolar_frame,
                cvPoint2D32f(bgr_frame->width/2, bgr_frame->height/2),
                40,
                CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS
                );
                cvWriteFrame(writer, logpolar_frame);
    }
    cvReleaseVideoWriter(&writer);
    cvReleaseImage(&logpolar_frame);
    cvReleaseCapture(&capture);
    return 0;
}

コードを実行してもエラーは発生しません。代わりに、プログラムがコンソールに出力します。

WARNING: Could not create empty movie file container.

次の100行ほどが続きます:

Didn't successfully update movie file.

このエラー(またはそれが呼ばれるもの)は何を意味し、何が原因ですか?

これが役立つかどうかはわかりませんが、コーデック(本ではMJPGでした)に関するエラーが発生したため、に変更CV_FOURCC('M', 'J', 'P', 'G')しましたCV_FOURCC('N', 'T', 'S', 'C')

4

3 に答える 3

2

NTSCは有効なコーデックfourccではないため、ビデオライターは作成されていません

于 2012-06-18T16:39:31.023 に答える
2

に変更CV_FOURCC('N', 'T', 'S', 'C')してみてくださいCV_FOURCC('D', 'I', 'V', 'X')。こちらがあなたのためのマニュアルです。

可能なコーデック:

CV_FOURCC('P','I','M','1')    = MPEG-1 codec
CV_FOURCC('M','J','P','G')    = motion-jpeg codec (does not work well)
CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec
CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec
CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec
CV_FOURCC('U', '2', '6', '3') = H263 codec
CV_FOURCC('I', '2', '6', '3') = H263I codec
CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec
于 2012-06-18T16:46:30.190 に答える
1

同じメッセージの解決策を探しに来ました。私の場合、Mac / OSXを使用し、CV_FOURCC('M'、'J'、'P'、'G')を使用しました。出力ファイルが「.mp4」で終わり、「。avi」で動作すると失敗することが判明しました。

于 2012-07-27T10:15:43.953 に答える