1

キャプチャを作成し、そこから最初のフレームを取得する単純な openCV コードを作成しようとしています。

**CvCapture *m_pCapfile = cvCreateFileCapture(m_aviFileName.c_str());
if (m_pCapfile)
     m_frames = cvRound(cvGetCaptureProperty(m_pCapfile, CV_CAP_PROP_FRAME_COUNT));
cvSetCaptureProperty(m_pCapfile, CV_CAP_PROP_POS_FRAMES, 0);
int ret = cvGrabFrame( m_pCapfile);
IplImage *cap = cvRetrieveFrame( m_pCapfile);**

m_frames には 153 があり、これは私が知る限り正しいフレーム数です。cvGrabFrame は ret に 1 を返しますが、cvRetrieveFrameはクラッシュします。

cvCreateFileCaptureの代わりにcvCaptureFromFilecvCaptureFromAVIを使用してみます どちらの場合もcvRetrieveFrameメソッドがクラッシュします。

何か案は?

ありがとう

4

1 に答える 1

1

**CvCapture *m_pCapfile = cvCreateFileCapture(m_aviFileName.c_str()); これは CvCapture ではないでしょうか?

次のように

CvCapture *m_pCapfile = cvCreateFileCapture(m_aviFileName.c_str());

コードを私が提案したものに変更する必要があると思います。さらに、これが完全なコードである場合は、フレームを取得しているループ中に cvReleaseCapture() を呼び出していないことを確認してください。このメソッドは、必要なすべてのフレームまたは指定された数のフレームをキャッチしたときにのみ、最後に呼び出されます。

于 2012-11-01T07:29:08.337 に答える