从参加工做到如今,使用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的支持。html
过程以下(环境Ubuntu12.04.2 LTS):java
1.清除原有的x264和ffmpeg,方面后续的手动编译(aptitude与apt-get的等同,在处理包的依赖关系时更加优秀,因此我通常采用这个软件包管理工具)。linux
1
|
sudo
aptitude remove ffmpeg x264 libx264-dev
|
2.安装x264和ffmpeg依赖的软件包git
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源码包web
从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,则须要按照以下的选项编译。windows
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/ide