Я запускаю простой код для захвата видео из файла, но он возвращает ошибку сегментации
#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 2.4, используя cvCaptureFromFile()/cvQueryFrame(). Преобразование моего AVI в FLV (с использованием avconv) сработало для меня.
Я предполагаю, что это ошибка OpenCV.