web-dev-qa-db-ja.com

openCVエラー:アサーションに失敗しました(scn == 3 || scn == 4)

フレームごとにビデオを読み書きしながら、最後のフレームでアサーションに失敗しましたエラーが発生しています。エラーは最後のフレームでのみ表示され、理由はわかりません。この答えを見ました here 、これはwaitkeyを与えることを示唆しています、私のコードにはすでにwaitキーがあります。

私の簡単なコードは次のとおりです

int main()
{
  CvCapture *capture=cvCaptureFromFile("C:\\vid\\op.mp4");
  if(capture==NULL)
   {
 printf("can't open video");
   }
   Mat frame, first_frame,current_frame;
  char buffer[100];
  int frame_count=1,p=1;
  while(1)
   {
   /*Getting the current frame from the video*/
    frame=cvQueryFrame(capture);
    cv::cvtColor(frame,current_frame,1);   //saving current frame 
    sprintf(buffer,"C:\\frames\\image%u.jpg",p);    
    imwrite(buffer,current_frame);
    p++;

     waitKey(1);
   }
   return 0;
}  

誰でも助けてください

解決策:すべてのファイルを読み込んだ直後にチェックを追加しました-

if(frame.empty()){
    fprinf("cannot access frame");
    return -1;
}
15
MMH

各クエリの後にフレームが空かどうかを確認する必要があります

お気に入り

   frame=cvQueryFrame(capture);
     if (frame.empty()) break;

最後のフレームの後に空のマットをグレースケールに変換しようとしているため、このようなエラーが発生します。フレームが空の場合はループを終了します。

18
Haris