フレームごとにビデオを読み書きしながら、最後のフレームでアサーションに失敗しましたエラーが発生しています。エラーは最後のフレームでのみ表示され、理由はわかりません。この答えを見ました 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;
}
各クエリの後にフレームが空かどうかを確認する必要があります
お気に入り
frame=cvQueryFrame(capture);
if (frame.empty()) break;
最後のフレームの後に空のマットをグレースケールに変換しようとしているため、このようなエラーが発生します。フレームが空の場合はループを終了します。