gpt4 book ai didi

c++ - 从文件中读取视频时 opencv 出现段错误

转载 作者:行者123 更新时间:2023-11-28 07:20:41 26 4
gpt4 key购买 nike

我正在运行一个简单的代码来从文件中捕获视频,但它返回一个段错误

     #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 错误。

关于c++ - 从文件中读取视频时 opencv 出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19515207/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com