从参加工作到现在,使用opencv已经有近五个月的时间,从刚开始误入歧途学习1.x版本的API到后来纠正学习路线,再到用Opencv做很多 图像处理工作。在这过程中,opencv从2.4.3更新到了2.4.5,每一次都让我有一种耳目一新的感觉,当我使用2.4.3编写程序要被java调 用时,刚开始想到采用JNI,但是发现2.4.3到2.4.4的更新正式添加了的java的支持,虽然在2.4.3之前就有java版本的opencv, 但是是由一个岛国程序猿贡献的,性能不是特别好。当我使用2.4.4工作的是对CLAHE算法进行纠结的时候,2.4.5出现了,其中一条就是添加 CLAHE的算法,让我又小激动了一下。随着使用的时间越来越长,对opencv的module也了解的越来越清楚,甚至都发现了一两个小bug自己动手 进行了修复,然后重新编译。废话不多说了,之前最视频采集压缩编码时发现对H264编码的不支持,于是回忆起半年过前做基于ARM的嵌入式视频采集项目时 利用x264和ffmpeg作h264编码压缩,这次同样采用这种方法进行,于是乎进行添加x264和ffmpeg的支持。
过程如下(环境Ubuntu12.04.2 LTS):
1.清除原有的x264和ffmpeg,方面后续的手动编译(aptitude与apt-get的等同,在处理包的依赖关系时更加优秀,所以我一般采用这个软件包管理工具)。
1
|
sudo
aptitude remove ffmpeg x264 libx264-dev
|
2.安装x264和ffmpeg依赖的软件包
1
2
|
sudo
aptitude update
sudo
aptitude
install
build-essential checkinstall git cmake libfaac-dev libjack-jackd2-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libva-dev libvdpau-dev libvorbis-dev libx11-dev libxfixes-dev libxvidcore-dev texi2html yasm zlib1g-dev
|
3.下载并编译安装x264源码包
从ftp://ftp.videolan.org/pub/videolan/x264/snapshots/下 载一个稳定的x264源码包,不需要太新,但也不要太老,太新的源码包依赖于较新的其他包,比如x264-20130531stable依赖yasm版本 要高一些,但是apt源中提供的版本较低,需要手动编译yasm。假如yasm需要其他更新的包,这样就更加繁琐了,为了方便我这里采用一年前的安装包。
1
2
3
4
5
6
7
8
|
cd
/opt
sudo
wget
ftp
:
//ftp
.videolan.org
/pub/videolan/x264/snapshots/x264-snapshot-20120601-2245-stable
.
tar
.bz2
sudo
tar
-xvf x264-snapshot-20120601-2245-stable.
tar
.bz2
cd
x264-snapshot-20120601-2245-stable
#如果使用的32位的linux,按照如下选项编译即可。
sudo
.
/configure
--
enable
-static --
enable
-shared
sudo
make
sudo
make
install
|
如果你使用的是64位的linux,则需要按照如下的选项编译。
1
2
3
|
sudo
.
/configure
--
enable
-shared --
enable
-pic
sudo
make
sudo
make
install
|
否则在编译opencv过程中,会出现如下错误提示:
Linking CXX shared library ../../lib/libopencv_highgui.so
/usr/bin/ld: /usr/local/lib/libavcodec.a(avpacket.o): relocation R_X86_64_32S against `av_destruct_packet’ can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libavcodec.a: could not read symbols: Bad value
大概是编译到26%的过程中.
3.下载并编译安装ffmpeg(由于ffmpeg需要先安装x264,所以顺序不能颠倒)
最新版本的ffmpeg可以到http://ffmpeg.org/download.html下载,这里我采用的是1.2.1的版本。过程如下:
1
2
3
4
5
6
7
8
9
10
11
12
|
cd
/opt
sudo
wget http:
//ffmpeg
.org
/releases/ffmpeg-1
.2.1.
tar
.bz2
sudo
tar
-xvf ffmpeg-1.2.1.
tar
.bz2
cd
ffmpeg-1.2.1
#如果是linux32位平台
sudo
.
/configure
--
enable
-gpl --
enable
-libfaac --
enable
-libmp3lame --
enable
-libopencore-amrnb --
enable
-libopencore-amrwb --
enable
-libtheora --
enable
-libvorbis --
enable
-libx264 --
enable
-libxvid --
enable
-nonfree --
enable
-postproc --
enable
-version3 --
enable
-x11grab
sudo
make
sudo
make
install
#如果是linux64位平台
sudo
.
/configure
--
enable
-gpl --
enable
-libfaac --
enable
-libmp3lame --
enable
-libopencore-amrnb --
enable
-libopencore-amrwb --
enable
-libtheora --
enable
-libvorbis --
enable
-libx264 --
enable
-libxvid --
enable
-nonfree --
enable
-postproc --
enable
-version3 --
enable
-x11grab --
enable
-shared --
enable
-pic
sudo
make
sudo
make
install
|
这样x264和ffmpeg就编译安装完成了,其中特别注意的是如果是其他架构的CPU,比如64位或者ARM架构的,configure选项是不 同的,其中64位的cpu架构特别需要–enable–shared –enable-pic选项。否则就会报上述错误,如果没有–enable-shared会默认编译为静态库,但是编译opencv的时候链接器无法识别 该库,至于–enable-pic选项原因暂时未知,不过在编译ffmpeg的时候经常需要这个选项。
4.安装opencv2.4.5
这是目前最新版的opencv了,下载之后,放到/opt目录下
1
2
3
4
5
6
7
|
cd
/opt/opencv-2
.4.5
mkdir
release
cd
release
#cmake如果有其他需要的话可以根据官方文档进行添加,比如添加TBB支持,-DWITH_TBB=ON
cmake ..
sudo
make
sudo
make
install
|
这样,为opencv编译x264和ffmpeg就安装完成了。
总结:
很久没用采用源码包编译安装程序了,这次编译让我回忆起了几年前刚学习linux源码包安装的时的乐趣。几年过去了,Linux也从虚拟机搬到了我实体 机,“windows7下虚拟机安装linux的日子”变成了现在“linux下虚拟机安装windows7”的日子。手中管理的Linux VPS和服务器也越来越多。也许大学给我的其中之一就是“喜欢”上linux?在linux下开发我还是个小菜鸟,希望未来的很长的日子里,我可以从在 linux下开发发展为对linux开发。
编译参考:
A Comprehensive Guide to Installing and Configuring OpenCV 2.4.2 on Ubuntu Web Site:http://www.ozbotz.org/opencv-installation/
Sebastian Montabone has several articles on installing OpenCV and image processing. His web site is http://www.samontab.com/