opencv - c++ videoccapture无法打开视频文件
OpenCV-C++ VideoCapture fails to open video files
最近我将我的操作系统从Ubuntu Precise Saucy(13.10)升级到Trusty(14.04)。升级后,cv::VideoCapture无法正常工作。程序在读取视频文件时中止。例如,
int main(int argc, char**argv)
{
cv::VideoCapture vin("sample/vout2l.avi");
...
在执行这个程序时,它以一条消息终止:
*** Error in `./cv2-videoread.out': malloc(): memory corruption: 0x0000000000e3eff0 ***
Abort (core dumped)
反向跟踪如下:
[New LWP 15586]
[New LWP 15587]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `./cv2-videoread.out'.
Program terminated with signal SIGABRT, Aborted.
#0 0x00007ff953e61c37 in raise () from /lib/x86_64-linux-gnu/libc.so.6
(gdb) bt
#0 0x00007ff953e61c37 in raise () from /lib/x86_64-linux-gnu/libc.so.6
#1 0x00007ff953e65028 in abort () from /lib/x86_64-linux-gnu/libc.so.6
#2 0x00007ff953e9e2a4 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#3 0x00007ff953eabe26 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#4 0x00007ff953eac1ab in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#5 0x00007ff953eadba4 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#6 0x00007ff953eaf7d2 in posix_memalign () from /lib/x86_64-linux-gnu/libc.so.6
#7 0x00007ff94fa640fe in av_malloc () from /usr/lib/x86_64-linux-gnu/libavutil.so.52
#8 0x00007ff94fa641b1 in av_strdup () from /usr/lib/x86_64-linux-gnu/libavutil.so.52
#9 0x00007ff94fa5e5db in av_dict_set ()
from /usr/lib/x86_64-linux-gnu/libavutil.so.52
#10 0x00007ff954738574 in CvCapture_FFMPEG::open(char const*) ()
from /usr/lib/libopencv_highgui.so.2.4
#11 0x00007ff954738719 in cvCreateFileCapture_FFMPEG ()
from /usr/lib/libopencv_highgui.so.2.4
#12 0x00007ff95473aac9 in cvCreateFileCapture_FFMPEG_proxy(char const*) ()
from /usr/lib/libopencv_highgui.so.2.4
---Type <return> to continue, or q <return> to quit---
#13 0x00007ff954722d89 in cvCreateFileCapture ()
from /usr/lib/libopencv_highgui.so.2.4
#14 0x00007ff954723045 in cv::VideoCapture::open(std::string const&) ()
from /usr/lib/libopencv_highgui.so.2.4
#15 0x00007ff95472315c in cv::VideoCapture::VideoCapture(std::string const&) ()
from /usr/lib/libopencv_highgui.so.2.4
#16 0x0000000000401281 in main (argc=1, argv=0x7fff1f938388) at cv2-videoread.cpp:30
(gdb)
注:cv::VideoCapture vin(...
为第30行。
在升级操作系统之前,此代码使用相同的输入文件。
从回溯来看,故障似乎发生在CvCapture_FFMPEG
和libavutil
。我升级了ffmpeg libavutil-dev libavutil51 libavutil52
包,但是它们已经是最新的了。此外,OpenCV包是最新的(我检查了libopencv-core-dev libopencv-core2.4 libopencv-dev libopencv-highgui-dev libopencv-highgui2.4
)。
我也测试了从源代码构建的OpenCV,但得到了相同的结果。
你有办法解决这个问题吗?
所以,我已经解决了这个问题。
通过分析ldd
的程序,我发现它链接到,例如,/usr/lib/libopencv_highgui.so
。但是,在x86_64系统中,它应该是/usr/lib/x86_64-linux-gnu/libopencv_highgui.so
。在我的系统中,这两个文件都安装了。
这个问题是由/usr/lib/libopencv_*.so
引起的(我不确定我是如何安装它们的)。也许从源代码…?)。我删除了这些文件,并重新编译了上面的程序。
相关文章:
- 如何在 c++ 中通过 http 发送大型视频文件?
- 媒体基础将音频流添加到视频文件
- 帧提取 使用OpenCV的视频文件开头只有几秒钟
- 使用 OpenCV C++ 每 1 分钟创建新的视频文件
- 如何检查给定文件是否是C++中的有效视频文件?
- 媒体基础获得视频文件的精确帧(样本)计数
- 如何在不重写整个视频文件的情况下仅替换流中的一个数据框架?(ffmpeg)
- 创建可用的H.264视频文件
- 如何避免在 c++ 中使用 libssh scp 命令压缩从远程 ssh 下载的图像、音频和视频文件?
- 如何使用Windows Media Foundation直接将视频文件直接解码为Direct3D11纹理
- ARtoolkit加载从4k相机索尼捕获的视频文件
- 读取视频文件"Open CV WARNING: Couldn't read movie file bird.avi"时出现问题
- 将视频文件的帧总数保存到.txt文件中
- 从OpenCV C 中的视频文件中检索每三个帧
- 使用来自视频文件或网络摄像头的 Kinect 面部跟踪
- 来自视频文件的QVideo帧列表
- 如何在OpenCV 2.4.3中编写视频文件
- 如何在不使用QMediaPlayer的情况下获取Qt中音频和视频文件的持续时间
- 无法使用 QFileSystemModel 解析不同音频/视频文件的系统目录
- 如何在QT中播放视频文件