Ошибка сегментации с opencv при чтении видео из файла

0

Я запускаю простой код для захвата видео из файла, но он возвращает ошибку сегментации

     #include "opencv2/highgui/highgui.hpp"
     #include<opencv2/opencv.hpp>
     #include <stdio.h>
     //#include <iostream>

     using namespace cv;
     using namespace std;

     int main()
     {
    CvCapture* capture = cvCreateFileCapture("/home/ayush/20130521053652.avi");

    IplImage* frame = NULL;

    if(!capture)
    {
        printf("Video Not Opened\n");
        return -1;
    }

    int width = (int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH);
    int height = (int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT);
    double fps = cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
    int frame_count = (int)cvGetCaptureProperty(capture,  CV_CAP_PROP_FRAME_COUNT);

    printf("Video Size = %d x %d\n",width,height);
    printf("FPS = %f\nTotal Frames = %d\n",fps,frame_count);

    while(1)
    {
        frame = cvQueryFrame(capture);

        if(!frame)
        {
            printf("Capture Finished\n");
            break;
        }

        cvShowImage("video",frame);
        cvWaitKey(10);
    }

    cvReleaseCapture(&capture);
    return 0;
}

Я также пробовал этот выше код, который на самом деле является решением для конкретного вопроса, но он все еще дает мне одно и то же...

Информация о видеофайлах

   $file 20130521053652.avi 
   20130521053652.avi: RIFF (little-endian) data, AVI, 640 x 480, 30.00 fps, video:

дополнительная информация

   Dimensions: 640 x 480
   Codec:      24-bit RGB
   Framerate:  30 frames per second
   Bitrate:    N/A  

Я думаю, что в кодеке должна быть проблема с моей платформой linux/ubuntu 12.04 LTS, пожалуйста, любой орган предложит мне решение для этого

Через отладчик gdb возникает ошибка сегментации в frame = cvQueryFrame(capture)

o/p - это что-то такое

     (gdb) 
      66          frame = cvQueryFrame(capture);           
     (gdb) 

                  Program received signal SIGSEGV, Segmentation fault.
                __memcpy_ssse3 () at ../sysdeps/i386/i686/multiarch/memcpy-ssse3.S:160
       160  ../sysdeps/i386/i686/multiarch/memcpy-ssse3.S: No such file or directory.

через Qt IDE ==> Отладка

      0xb751d9fa  <+0x146a>         movzbl (%eax),%eax
      1951  in ../sysdeps/i386/i686/multiarch/memcpy-ssse3.S
      0xb751d9fd  <+0x146d>         mov    %al,(%edx)
      1952  in ../sysdeps/i386/i686/multiarch/memcpy-ssse3.S
      1953  in ../sysdeps/i386/i686/multiarch/memcpy-ssse3.S
      0xb751d9ff  <+0x146f>         mov    0x8(%esp),%eax
      1954  in ../sysdeps/i386/i686/multiarch/memcpy-ssse3.S
      1955  in ../sysdeps/i386/i686/multiarch/memcpy-ssse3.S
      1956  in ../sysdeps/i386/i686/multiarch/memcpy-ssse3.S
      1957  in ../sysdeps/i386/i686/multiarch/memcpy-ssse3.S
      1958  in ../sysdeps/i386/i686/multiarch/memcpy-ssse3.S
      1959  in ../sysdeps/i386/i686/multiarch/memcpy-ssse3.S
      0xb751da03  <+0x1473>         pop    %ebx
      0xb751da04  <+0x1474
Теги:
opencv
segmentation-fault

1 ответ

1

У меня была такая же проблема в OpenCV 2.4, используя cvCaptureFromFile()/cvQueryFrame(). Преобразование моего AVI в FLV (с использованием avconv) сработало для меня.

Я предполагаю, что это ошибка OpenCV.

  • 0
    О, это действительно помогло? может быть, я попытаюсь конвертировать мои видео в FLV, и, надеюсь, они могут работать!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню