6

こんにちは、ファイルからビデオをキャプチャするためにこのコードを書きました

#include <stdio.h>
#include <cv.h>
#include "highgui.h"
#include <iostream>

//using namespace cv

int main(int argc, char** argv)
{
    CvCapture* capture=0;
    IplImage* frame=0;
    capture = cvCaptureFromAVI(char const* filename); // read AVI video    
    if( !capture )
        throw "Error when reading steam_avi";

    cvNamedWindow( "w", 1);
    for( ; ; )
    {
        frame = cvQueryFrame( capture );
        if(!frame)
            break;
        cvShowImage("w", frame);
    }
    cvWaitKey(0); // key press to close window
    cvDestroyWindow("w");
    cvReleaseImage(&frame);
}

実行するたびに、次のエラーが発生します。

CaptureVideo.cpp: 関数 'int main(int, char**)' 内:

CaptureVideo.cpp:13:28: エラー: 'char' の前にプライマリ式が必要です</p>

どんな助けでも大歓迎です。

4

1 に答える 1

17

これは C++ の質問なので、C++ インターフェイスを使用する必要があります。

元のコードのエラー:

  • char const*で削除するのを忘れましたcvCaptureFromAVI
  • フレームが表示されるのを待ちません。ShowImageその後に WaitKey が続く場合にのみ機能します。
  • capture=NULL がファイルが開かれていないことを意味するかどうかはわかりません。isOpened代わりに使用してください。

あなたのコードを修正し、C++ インターフェイスに入れました。これで、適切な C++ コードになりました。私の書き直しは、あなたのプログラムと同じように行ごとに行います。

//#include <stdio.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
//#include <iostream>

using namespace cv;
using std::string;

int main(int argc, char** argv)
{
    string filename = "yourfile.avi";
    VideoCapture capture(filename);
    Mat frame;

    if( !capture.isOpened() )
        throw "Error when reading steam_avi";

    namedWindow( "w", 1);
    for( ; ; )
    {
        capture >> frame;
        if(frame.empty())
            break;
        imshow("w", frame);
        waitKey(20); // waits to display frame
    }
    waitKey(0); // key press to close window
    // releases and window destroy are automatic in C++ interface
}
于 2012-12-04T23:28:19.487 に答える