Linux 下编译安装OpenCV
1、Cmake的安装
OpenCV 2.2以后版本需要使用Cmake生成makefile文件,因此需要先安装cmake。Centos下安装cmake比较简单:
yumt install cmake
如果觉得自带的版本不符合要求,可以下载安装包。
1) 安装编译所需要的包
yum -y install gcc
yum installl gcc-c++ (yum 安装g++时,程序名不是 g++,而是 gcc-c++,否则搜不到。)
yum install make
2) 下载最新版的安装包并安装
Ø 下载cmake源码cmake-2.6.2.tar.gz,http://www.cmake.org/cmake/resources/software.html
Ø 编译安装
tar xvf cmake-3.2.2.tar.gz
cd cmake-3.2.2/
如果本机上不存在cmake,则:
./bootstrap
make
make install
如果本机上存在cmake,想安装一个新版本,则:
cmake .
make
make install
Ø 查看安装版本,验证是否成功
root@emouse:/home# cmake --version
cmake version 3.2.2
CMake suite maintained and supported by Kitware (kitware.com/cmake).
2、安装libgtk2.0-dev 和 pkg-config
先安装 libgtk2.0-dev 和 pkg-config,,否则后期编译运行程序会出现类似如下的问题:
OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvNamedWindow, file /usr/local/opencv/OpenCV-2.0.0/src/highgui/window.cpp, line 100
terminate called after throwing an instance of 'cv::Exception'
可以直接用
yum install gtk*,
gtk*安装完了以后会带有pkg-config
yum info pkgconfig 查看是否已经安装
Ubuntu通过网络安装
# apt-get install libgtk2.0-dev
# apt-get install pkg-config
3、源码安装opencv
a) 下载opencv,http://www.opencv.org.cn/index.php/Download
b) 安装opencv-2.3.1
tar -xvf OpenCV-2.3.1.tar.bz2
cd OpenCV-2.3.1/
mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON ..
make
sudo make intall
c) 添加库路径
sudo vim /etc/ld.so.conf.d/opencv.conf
添加:/usr/local/lib(可能会没有opencv.conf这个文件,那我们就自己创建一个)
d) 更新系统库
$sudo ldconfig
e) 设置环境变量
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
f) 测试
cd samples/c
chmod +x build_all.sh
./build_all.sh
./facedetect --cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" --scale=1.5 lena.jpg
可以看到以下图片,说明opencv 安装正常
4、遇到的问题
问题1:(result:20195): Gtk-WARNING **: cannot open display:
[root@tvie c]# ./facedetect --cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" --scale=1.5 lena.jpg
执行后返回:
Processing 1 --cascade=/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml
from which we have cascadeName= /usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml
Processing 2 --scale=1.5
from which we read scale = 1.5
Processing 3 lena.jpg
(result:20195): Gtk-WARNING **: cannot open display:
解决方案:
1. SDL安装
2. ssh连接配置,x11forwarding
与VNC方式不同,qemu-kvm利用图形界面方式开启虚拟机,会以弹出窗口的方式与虚拟机交互。某些情况下,工作环境是通过各种term程序利用ssh登录到服务器,这时执行qemu的启动程序,通常会产生“Gtk-WARNING **: cannot open display”的错误。
造成这种情况的原因有很多,简单来说,服务器与本机环境之间要互相收发“图形界面”信息,两端要规定一种特殊的信息约定,用于编写和翻译图形界面信息,这就需要一个软件来完成这个特殊的编解码,此处一般为SDL,同时建立连接的程序还必须允许该软件在这个连接上可信。打个比方,两个国家间互相运输货物,货物必须经过拆解才能放上船,到达后根据双方约定可组装起来以供使用。同时,两国的海关需要允许货物出关和入关。此处,SDL即为双方的约定,ssh的安全机制为海关。
SDL是一个跨平台的多媒体图形声音界面库,开发者基于它开发上层图形界面程序,只需底层平台支持SDL库。简介:http://zh.wikipedia.org/wiki/SDL。项目主页:http://www.libsdl.org/。
针对以上的几个主要环节,任何一个环节出现问题,都会出现标题所示的提示信息。所以,采取各个击破的解决办法:
1. SDL安装问题,开发机与本机环境必须都支持SDL,在两台机器上正确安装或更新SDL程序
2. ssh开启X11Forwarding:
linux下/etc/ssh/sshd_config中,添加 X11Forwarding yes
本机客户端为一些桌面终端程序如Xshell,需要在ssh连接设置里面勾选X11forwarding选项:
Mac系统需要安装X桌面X11-XQuartz(https://xquartz.macosforge.org/trac/wiki),在包括linux的使用X11的平台上,SDL基于Xlib而编写。某些时候需要保持ssh连接,所以在建立ssh连接时添加-Y选项或修改客户端/etc/ssh/ssh_config的ForwardX11Trusted yes,添加信任项。
至此,几种本机与服务器情况基于以上步骤都解决了。
问题2:
./build_all.sh: line 14: pkg-config: command not found
解决方案:
先安装pkg-config,在安装openCV,否则环境会配置失败。可以yum install gtk*,也可以下载后编译安装,地址http://download.chinaunix.net/download/0009000/8174.shtml,
Ø 运行配置文件进行系统配置 : ./configure
Ø 编译pkgconfig : make
Ø 安装包自检测 : make check
Ø 安装 :make install
问题3:
Centos下SDL-1.2.x Library 的安装
解决方案:
在Linux下许多软件都必须有SDL库的支持,尤其是些游戏和比较炫的软件,其中SDL库是夸平台的,用起来十分方便。SDL的定义如下:
baidu百科:SDL(Simple DirectMedia Layer)是一个自由的跨平台的多媒体开发包,适用于 游戏、游戏SDK、演示软件、模拟器、MPEG播放器和其他应用软件。
a) 安装官方包
SDL库大致可分为一下几部分 sdl_image,sdl_mixer,sdl_net,sdl_ttf,sdl_rft,各个库的功能wiki都有明确的解释,一般只需要前4个库就可以了,但是Linux系统中一般需要重新安装SDL,而Centos官方库中只有 SDL.i386 和SDL-devel.i386,可使用yum install 来安装,
[]# yum list *SDL*
---SDL.i386
---SDL-devel.i386
[]# yum install SDL.i386
[]# yum install SDL-devel.i386
b) 2.安装扩展包(可以不安装先)
安装完官方的包后,只能在寻找对应自己系统的运行库和开发库,由于没有Centos官方包的支持,所以软件依赖性的问题折磨了许久,最后发现要现安装runtime版本,再安装development版本(有点费解)。我只安装了前3个,不过后两个也可以以后装,我的系统是Centos5.5所以找到对应的软件包,注意:开发库也就是devel的版本必须和runtime版本是一样的,我下载了这几个包:
SDL_image-1.2.5-4.el5.i386.rpm
SDL_image-devel-1.2.5-4.el5.i386.rpm
SDL_mixer-1.2.4-7.i386.rpm
SDL_mixer-devel-1.2.4-9.i386.rpm
SDL_net-1.2.7-7.el5.i386.rpm
SDL_net-devel-1.2.7-7.el5.i386.rpm
以上包可在这个下载地址中search
这些添加库中最麻烦也是最重要的就是SDL_image,许多问题就是出在他上面,需要注意。
以后挨个安装每个库就可以了,开发版本要最后装。
到这里 SDL Library 就安装完了,不同的linux版本所需的版本不同,还要区分来装,这样安装后还有不少问题,以后有待解决,不过这样大致就可以用了。