默认安装的opencv 很多视频格式打不开,cvCreateFileCapture返回值为NULL,为了解决此问题,需要安装视频编解码的库,我选择安装ffmpeg,我在windows下也用过这个库。
1、下载ffmpeg
从svn上下载,需要先安装svn
yum install subversion
svn checkout svn://svn.mplayerhq.hu//ffmpeg/trunk ffmpeg
下载下来的目录下多了ffmpeg文件夹
2、安装ffmpeg
cd ffmpeg
./configure --enable-shared --enable-gpl
make install
出错,出错信息如下:
libavcodec/x86/h264_qpel_mmx.c:1294: Error: suffix or operands invalid for `cmp'
应该是cmp函数的问题,网上说这个和gcc版本有关系,我之前装chrome把gcc版本更新为4.8.1,对于ffmpeg来说版本太高了,需要低版本的gcc
下载了gcc-4.3.6,安装上,然后再编译ffmpeg
./configure --enable-shared --enable-swscale --enable-gpl --disable-yasm
由于yasm 老是报错,我们不需要就直接给disable了。
make
make install
此时在/usr/local/include下面出现
libavcodec libavdevice libavformat libavutil libswscal
在这个目录下新建立一个ffmpeg文件夹,这样做的原因是,OPENCV在配置时会在这个文件下去寻找需要的头文件。
cd /usr/local/include
mkdir ffmpeg
cp lib*/* ffmpeg/ #由于我的include下面没有其他以lib开头的文件所以可以这样
在命令行输入ffmpeg,出错:
ffmpeg: error while loading shared libraries: libavdevice.so.52: cannot open shared object file: No such file or directory
查找 libavdevice.so.52所在位置,
ldd `which ffmpeg`
libavdevice.so.52 => not found
find /usr/local/lib | grep 'libavdevice'
所在/usr/local/lib下,将此路径加入环境变量
vim /etc/ld.so.conf
此时里面已经有了/usr/local/lib,却没有找到
输入ldconfig
然后再输入ffmpeg生效了,应该是每当装了一个东西都要ldconfig,装完opencv也是一样,要不然报错找不到动态链接库
3、重新编译opencv
将原来的opencv删掉,重新编译
cmake CMakeLists.txt
make
此处出错,
cc1plus: 错误:无法识别的命令行选项“-Wno-narrowing”
cc1plus: 错误:无法识别的命令行选项“-Wno-delete-non-virtual-dtor”
cc1plus: 错误:无法识别的命令行选项“-Wno-unnamed-type-template-args”
make[2]: *** [modules/core/CMakeFiles/opencv_core.dir/src/rand.cpp.o] 错误 1
make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] 错误 2
make: *** [all] 错误 2
后来我不但将/usr/local/lib和/usr/local/include下面有关opencv的删掉也把之前的编译的opencv的文件删除,重新解压进行编译没有报错,应该是之前编译是用的gcc高版本,而现在gcc版本低了链接就发生了错误。
cvCreateFileCapture返回值不为NULL了