Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCV-C++;VideoCapture无法打开视频文件_C++_Opencv_Ffmpeg - Fatal编程技术网

C++ OpenCV-C++;VideoCapture无法打开视频文件

C++ OpenCV-C++;VideoCapture无法打开视频文件,c++,opencv,ffmpeg,C++,Opencv,Ffmpeg,最近,我将我的操作系统从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():

最近,我将我的操作系统从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)
[新LWP 15586]
[新LWP 15587]
[已启用使用libthread_db的线程调试]
使用主机libthread_db library“/lib/x86_64-linux-gnu/libthread_db.so.1”。
核心由“./cv2 videoread.out”生成。
程序以信号SIGABRT终止,中止。
#0 0x00007ff953e61c37在/lib/x86_64-linux-gnu/libc.so.6的raise()中
(gdb)英国电信
#0 0x00007ff953e61c37在/lib/x86_64-linux-gnu/libc.so.6的raise()中
#1 0x00007ff953e65028位于/lib/x86_64-linux-gnu/libc.so.6的abort()中
#2 0x00007ff953e9e2a4英寸??()来自/lib/x86_64-linux-gnu/libc.so.6
#3 0x00007ff953eabe26英寸??()来自/lib/x86_64-linux-gnu/libc.so.6
#4 0x00007ff953eac1ab英寸??()来自/lib/x86_64-linux-gnu/libc.so.6
#5 0x00007ff953eadba4英寸??()来自/lib/x86_64-linux-gnu/libc.so.6
#来自/lib/x86\u 64-linux-gnu/libc.so.6的posix_memalign()中的6 0x00007ff953eaf7d2
#来自/usr/lib/x86_64-linux-gnu/libavutil.so.52的av_malloc()中的7 0x00007ff94fa640fe
#来自/usr/lib/x86_64-linux-gnu/libavutil.so.52的av_strdup()中的8 0x00007ff94fa641b1
#av指令集中的9 0x00007ff94fa5e5db()
来自/usr/lib/x86_64-linux-gnu/libavutil.so.52
#CvCapture_FFMPEG::open(char const*)中的10 0x00007ff954738574
来自/usr/lib/libopencv_highgui.so.2.4
#cvCreateFileCapture_FFMPEG()中的11 0x00007ff954738719
来自/usr/lib/libopencv_highgui.so.2.4
#cvCreateFileCapture\u FFMPEG\u代理(字符常量*)中的12 0x00007ff95473aac9()
来自/usr/lib/libopencv_highgui.so.2.4
---键入以继续,或键入q以退出---
#cvCreateFileCapture()中的13 0x00007ff954722d89
来自/usr/lib/libopencv_highgui.so.2.4
#cv::VideoCapture::open(标准::字符串常量)()中的14 0x00007ff954723045
来自/usr/lib/libopencv_highgui.so.2.4
#cv::VideoCapture::VideoCapture中的15 0x00007ff95472315c(标准::字符串常量)()
来自/usr/lib/libopencv_highgui.so.2.4
#cv2 videoread处的主屏幕上显示16 0x0000000000401281(argc=1,argv=0x7fff1f938388)。cpp:30
(gdb)
注意:
cv::VideoCapture vin(…
为第30行

在升级操作系统之前,此代码使用的是相同的输入文件

从回溯来看,问题似乎发生在
CvCapture\u FFMPEG
libavutil
上。我升级了
FFMPEG-libavutil-dev-libavutil51-libavutil52
软件包,但它们已经是最新的。 此外,OpenCV包是最新的(我选中了
libopencv核心开发libopencv-core2.4 libopencv开发libopencv-highgui开发libopencv-highgui2.4

我还测试了从源代码构建的OpenCV,但得到了相同的结果


你有办法解决这个问题吗?

所以,我已经解决了这个问题

通过使用
ldd
分析该程序,我发现它链接到,例如,
/usr/lib/libopencv\u highgui.so
。但是,在x86\u 64系统中,它应该是
/usr/lib/x86\u 64-linux-gnu/libopencv\u highgui.so
。在我的系统中,这两个文件都已安装


这个问题是由
/usr/lib/libopencv.*.so
引起的(我不确定我是如何安装它们的。可能是源代码…?)。我删除了这些文件,并重新编译了上面的程序。然后它就正常工作了。

所以,我解决了这个问题

通过使用
ldd
分析该程序,我发现它链接到,例如,
/usr/lib/libopencv\u highgui.so
。但是,在x86\u 64系统中,它应该是
/usr/lib/x86\u 64-linux-gnu/libopencv\u highgui.so
。在我的系统中,这两个文件都已安装

这个问题是由
/usr/lib/libopencv_*.so
引起的(我不确定我是如何安装它们的。可能是源代码…?)。我删除了这些文件,并重新编译了上面的程序。然后它就正常工作了