从文件中读取视频时 opencv 的分段错误
Segmentation Fault with opencv on reading a video from a file
>我正在运行一个简单的代码来从文件中捕获视频,但它返回了一个分段错误
#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 Openedn");
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 %dn",width,height);
printf("FPS = %fnTotal Frames = %dn",fps,frame_count);
while(1)
{
frame = cvQueryFrame(capture);
if(!frame)
{
printf("Capture Finishedn");
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错误。
相关文章:
- 分段故障(堆芯转储)矢量
- OpenCV 4.2.0 文件存储分段错误
- OpenCV 分段错误(核心转储)在使用 cv::Mat::at 时
- 从OpenCV阅读时,GTKMM Drawingare分段故障
- Opencv分段错误使用pthread捕获帧C++
- OpenCV imshow分段错误
- 使用某些OpenCV函数时出现分段错误
- 简单的C OPENCV IMSHOW示例与分段故障崩溃
- 调用包含图像作为参数opencv/c++的函数时出现分段错误
- 带有OpenCV的QTCreator存在分段错误
- OpenCV MWE 中的分段错误
- 多线程环境 (OpenMP) 中的 OpenCV 会导致分段错误
- 从文件中读取视频时 opencv 的分段错误
- OpenCV 的分段错误(核心转储)
- 使用OpenCV的分段错误
- 使用opencv调试代码失败,并出现分段错误
- 分段错误 - OpenCV 和 Qt in Netbeans on Ubuntu
- 使用OpenCv鱼眼::calibrate()函数时出现分段错误
- 在为 OpenCV 的 C++ createTrackbar 运行 C 包装器时出现编译分段错误(核心转储)
- OpenCV minMaxLoc函数中出现分段错误