web-dev-qa-db-fra.com

Erreur openCV: Échec de l'assertion (scn == 3 || scn == 4)

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;
}
15
MMH

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.

18
Haris