Centos下 ffmpeg 和opencv一起配合处理视频

默认安装的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

有人说是gcc版本太低的原因,有点无语,各种版本不配合。

后来我不但将/usr/local/lib和/usr/local/include下面有关opencv的删掉也把之前的编译的opencv的文件删除,重新解压进行编译没有报错,应该是之前编译是用的gcc高版本,而现在gcc版本低了链接就发生了错误。

cvCreateFileCapture返回值不为NULL了


你可能感兴趣的:(图像处理,linux)