J'ai une erreur d'échec de l'assertion à la dernière image, pendant la lecture et l'écriture d'une image vidéo image par image. Les erreurs n'apparaissent qu'à la dernière image, je ne sais pas pourquoi. vu cette réponse ici , ce qui suggère de donner une clé d'attente, mon code a déjà une clé d'attente dessus.
mon code simple est le suivant
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;
}
Quelqu'un s'il vous plaît aider
Solution: j'ai ajouté une vérification juste après avoir lu chaque fichier
if(frame.empty()){
fprinf("cannot access frame");
return -1;
}
Vous devez vérifier que votre cadre est vide ou non après chaque requête
Comme
frame=cvQueryFrame(capture);
if (frame.empty()) break;
Vous obtenez une telle erreur parce que vous essayez de convertir un Mat vide en niveaux de gris après la dernière image, donc quittez la boucle si l’image est vide.