您的位置:首页 > 编程语言

在ubuntu下使用cmake进行opencv的配置和Windows下进行使用cmake编译源代码

2016-08-01 22:09 896 查看
1.首先安装的是cmake软件,使用指令:

apt-get install cmake

接着查看版本,测试是否安装成功:

root@emouse:/home# cmake --version

cmake version 2.8.10.2

由于我们需要时有的是cmake界面来配置,所以我么要安装器ui界面,其指令是:

apt-get install cmake-gui

如果觉得自带的cmake版本不符合要求,可以自行下载安装包,其安装过程是:

下载最新版的安装包:
http://www.cmake.org/cmake/resources/software.html
这里下载已经编译好的,这样只需要解压至需要的目录下即可使用:

tar zxvf cmake-2.8.10.2-Linux-i386.tar.gz –C /usr/local/

设置环境变量:

sudo gedit /home/emouse/.bashrc

在打开的文件后添加:

export PATH=$PATH:/usr/local/cmake-2.8.10.2-Linux-i386/bin

安装完成后就可以使用上面通过检查其版本来看是否安装完成。

2、先安装 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'

通过网络获取安装:

# apt-get install libgtk2.0-dev
# apt-get install pkg-config


2、下载OpenCV ,文件名:OpenCV-2.4.3.tar.bz2,下载地址:
http://www.opencv.org.cn/index.php/Download
解压:

#tar jxvf OpenCV-2.4.3.tar.bz2

得到文件夹 OpenCV-2.4.3

此时在同级目录下新建一个文件夹opencv-x86作为PC编译目录,记住其实这个文件是为了存放一些编译过程生成的杂碎文件和一个最重要的makefile文件。

注意:不过现在的opencv提供的linux不是tar包了,而是zip包,其解压指令要使用unzip,当使用cd定位到文件所在目录后,使用指令为:unzip OpenCV-2.4.4.zip

3、#cmake-gui 打开cmake的gui界面,开始进行配置。

cmake主要用于进行一些配置设定,从而生成用于编译安装的makefile文件,通过界面进行参数的配置和设定,非常直观、方便。在配置中指定源码和编译目录以及生成方式。

按照下图的步骤进行配置:



点击Finish后cmake即载入默认配置,如下图所示:



当第一次configure配置完后,再次点击configure,最后点击generate,当出现有generate Done则表示完成。其中的/usr/local是用于存放生成的lib与dll文件,上面的CONFIGURATION_TYPES指的是进行两钟模式的lib和dll文夹生成,其是这一步还不会生成lib和dll,而是生成makefile文件,里面包含了我们的一些设置,为了生成lib和dll。下图是我们在Windows下安装opencv后自带的库文件目录(这是opencv以为我们编译好的,所以我们可以直接使用,而不需再自行编译产生库文件,但是当VS的版本与opencv的版本不兼容时,可以自行编译产生相应的库文件来解决)



另一种通过终端指令来配置相应的参数来生成makefile文件:

$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/home/OpenCV

(这里的PREFIX路径是自己定义的位置,其替代了默认路径/usr/local)如果使用全部使用默认路径则可以直接使用指令:

cmake .
注意别忘了这个点。只是这里通过图形界面的方式来进行配置,更加直观方便。

4.接下来使用cd定位到opencv-x86文件夹下使用指令:

make
make install

这上面的两条指令主要是为了对应编译器下的dll、lib文件,我们可以通过指令来查看make是否成功,然后再执行make install指令,检测正确与否指令是:

<span style="font-size:18px;">echo  $?</span>


输入这条命令回车后,输出的结果是0,那么就说明成功编译,否则就是出错了,echo $?表示检查上一条命令的退出状态,程序正常退出返回0!所以这是为什么我们的main函数要有返回值并且是正确返回0。

其跟我们在Windows下使用cmake生成库的步骤相同,其在使用cmake后也分为两步:

第一步:在debug模式下,选择解决方案“Opencv”,点击右键,运行“重新生成解决方案”;

第二步:生成成功后,再CMakeTargets目录下选择INSTALL,右键运行。

而release模式下也是这样子的两个步骤即可,其流程图如下:





5.接下来就是配置lib库:

在linux系统下安装了带有动态库的程序后,会在ld.so.conf.d文件目录下生产相应程序的.conf文件,其里面包含了

此软件运行需要装载的动态库路径,所以我们需要把我们使用cmake配置时的路径,我们使用的是默认路径,则我们的指令是:

sudo gedit /etc/ld.so.conf.d/opencv.conf
打开配置文件后就输入路径(这个文件夹一般是空的),其为:

/usr/local/lib
注意:在默认路径下在生成lib是会自动生成一个lib文件夹的。完成上的步骤后,这里的库文件仍然不能被调用,因为为linux系统的特性是,新加载的库文件需要缓存到一个叫ld.so.cache文件里(其里面包含了/etc/ld.so.conf中指定的目录中查找到的所有的库,按顺序排列),否则使用该软件是会报错,说缺少xxx库,而使用的指令是:

ldconfig


6.最后配置环境变量
其中pkgconfig文件夹里包含了软件的.pc文件,这个是包含了库的路径之类得东西,使用的指令是:

gedit /etc/bash.bashrc
在文件后添加:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存退出,重启计算机后就可以使用opencv例程来测试配置成功与否。

下面的一些是一些小知识,看与不看都可以,可以直接进入步骤7环节,其中ubuntu里的文件名字与其他linux系统有些差别,其如下:



注意: 在默认情况下,每个支持 pkgconfig 的库对应的 .pc 文件在安装后都位于安装目录中的 lib/pkgconfig 目录下。例如,我们在上面已经将 Glib 安装在 /opt/gtk 目录下了,那么这个 Glib 库对应的 .pc 文件是 /opt/gtk/lib/pkgconfig 目录下一个叫 glib-2.0.pc
的文件,这里面包含有软件的库lib位置,dll位置等,其内容为:

prefix=/opt/gtk/
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums

Name: GLib
Description: C Utility Library
Version: 2.12.13
Libs: -L${libdir} -lglib-2.0
Cflags: -I${includedir}/glib-2.0 -I${libdir}/glib-2.0/include
注意:为什么需要配置上面的路径呢?因为其是为了加快库的读取。

下面以Glib库为例子:

安装完 Glib 后,在 bash 中应该进行如下设置:

$ export PKG_CONFIG_PATH=/opt/gtk/lib/pkgconfig:$PKG_CONFIG_PATH

可以执行下面的命令检查是否 /opt/gtk/lib/pkgconfig 路径已经设置在 PKG_CONFIG_PATH 环境变量中:

$ echo $PKG_CONFIG_PATH

这样设置之后,使用 Glib 库的其它程序或库在编译的时候 pkg-config 就知道首先要到 /opt/gtk/lib/pkgconfig 这个目录中去寻找 glib-2.0.pc 了(GTK+ 和其它的依赖库的 .pc 文件也将拷贝到这里,也会首先到这里搜索它们对应的 .pc 文件)。之后,通过 pkg-config 就可以把其中库的编译和连接参数提取出来供程序在编译和连接时使用。
7.使用opencv例子程序来进行测试配置成功与否。
先在root目录下建立一个opencv_samples文件,然后把opencv自带的C文件夹下的例子程序复制到opencv_samples文件夹下,

其中在make install过程时会默认把资源文件放到/usr/local/share/OpenCV/文件下,其里面包含的内容是一些人脸、人眼级联器等数据,所以复制文件的指令是:

cd ~
mkdir openCV_samples
cp OpenCV-2.1.0/samples/c/* openCV_samples
cd openCV_samples/
chmod +x build_all.sh
./build_all.sh
接着就是执行可执行文件,在当前目录下使用 ls 指令来查看哪些文件是可以运行的(一般可执行文件的颜色是不同的),接着就是执行它,并输入一些数据,如下:

./facedetect --cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" --scale=1.5 lena.jpg
结果为:





参考文献:

外文的linux下配置opencv的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: