Подтвердить что ты не робот

OpenCV Ошибка: утверждение не выполнено (scn == 3 || scn == 4)

У меня возникает ошибка с подтверждением на последнем кадре при чтении и записи видео по кадре. Ошибки отображаются только на последнем кадре, не знаю почему. увидел этот ответ здесь, который предлагает дать waitkey, у моего кода уже есть ключ ожидания на нем.

мой простой код выглядит следующим образом

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;
}
4b9b3361

Ответ 1

Вам нужно проверить, что ваш кадр пуст или нет после каждого запроса

Как

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

Вы получаете такую ​​ошибку, потому что пытаетесь преобразовать пустой Mat в оттенки серого после последнего кадра, поэтому выйдите из цикла, если кадр пуст.