1

ねえ、現在のフレームと前のフレームの間の減算を試みました (コードが添付されています) 実行中のコードですが、エラーが発生し、コマンドプロンプトでエラーが発生せずに灰色のウィンドウが表示されます:

コンパイラがスタック変数を整列しませんでした。Libavcodec が正しくコンパイルされていないため、非常に遅くなったり、クラッシュしたりする可能性があります。これは libavcodec のバグではなく、コンパイラのバグです。gcc >= 4.2 を使用して再コンパイルしてみてください。FFmpeg 開発者にクラッシュを報告しないでください。OpenCV エラー: アサーションが失敗しました (src1.size() == dst.size() && src1.type() == dst.type()) 不明な関数、ファイル ........\ocv\opencv\ src\cxcore\cxarithm.cpp 、1563行目。

誰かがアイデアを持っていますか?助けてください!! ありがとうございました

int main()  
{  


int key = 0; 




 CvCapture* capture = cvCaptureFromAVI( "macroblock.mpg" ); 
 IplImage* frame = cvQueryFrame( capture );
 IplImage* currframe = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,1);
 IplImage* destframe = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,1);

    if ( !capture ) 

{  
    fprintf( stderr, "Cannot open AVI!\n" );  
    return 1;  
    }

  int fps = ( int )cvGetCaptureProperty( capture, CV_CAP_PROP_FPS );

  cvNamedWindow( "dest", CV_WINDOW_AUTOSIZE );

  while( key != 'x' )
      {
          frame = cvQueryFrame( capture );
     currframe = cvCloneImage( frame );// copy frame to current
     frame = cvQueryFrame( capture );// grab frame
   cvSub(frame,currframe,destframe);// subtraction between the last frame to cur

          if(key==27 )break;
          cvShowImage( "dest",destframe);
           key = cvWaitKey( 1000 / fps );
           }  
       cvDestroyWindow( "dest" );
       cvReleaseCapture( &capture );
       return 0;

}

4

1 に答える 1

3

問題はここにあります

IplImage* currframe = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,1);
IplImage* destframe = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,1);

あなたがしていることは、フレームごとに3つのチャネルを持つmpegを読み取っているということです。ここで減算を行うときは、1チャネルフレームから3チャネルフレームを減算します。これは問題を引き起こします。チャネル数を3に設定してみてください。それが機能するかどうかを確認してください

IplImage* currframe = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,3);
IplImage* destframe = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,3);

確かに、クエリされたイメージ、クローンされたイメージのチャネル数を確認してください。そして、最終的な画像を1チャンネルの宛先画像にプッシュしているので。そこにあなたはデータを破壊しています。どこでも例外がスロー/キャッチされない場合。

OpenCV Error: Assertion failed (src1.size() == dst.size() && src1.type() == dst. type()) 

アサーションの失敗は、私が説明したことの明確な指標のようです。

于 2012-04-05T11:33:13.427 に答える