1、安装辅助软件

1.1、安装arm-linux-g++

下载arm-linux-gcc-4.3.2.tgz。然后使用#tar  -zxvf  arm-linux-gcc-4.3.2.tgz  -C /命令解压。可以看到其已经被解压到/usr/local/arm/4.3.2目录下了。使用命令#vim /etc/bash.bashrc打开文件进行配置。在最后一行输入下面一句:

export PATH=$PATH:/usr/local/arm/4.3.2/bin

保存并退出。打开一个新终端或者在本终端输入#source /etc/bash.bashrc使得配置信息生效。原理可以查看博文《/etc/profile、/etc/bash.bahsrc、~/.profile、~/.bashrc的用途》

1.2、安装cmake-gui

输入命令$cmake-gui后,会出现下面的提示,尚未安装cmake-gui,即没有安装图形界面。

ARM opencv环境配置 arm跑opencv_bash

用其提示的命令安装即可  $sudo apt-get install cmake-qt-gui。安装过程需要联网。

2、安装OpenCV

2.1、下载OpenCV       到http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/或者github或者opencv官网下载安装opencv。自己选一个版本。我使用的是2.40。

下载完成后,把文件解压到/root/download目录下。

2.2使用cmake编译源码

添加gtk+-2.0的支持:

ARM opencv环境配置 arm跑opencv_ARM opencv环境配置_02

切换到root用户(要使用root权限运行cmake-gui)。

1)输入#cmake-gui打开cmake的图形界面。在cmake的图形界面中输入OpenCV的源代码的所在路径和要安装的地点。如下图所示。

ARM opencv环境配置 arm跑opencv_linux_03

2)点击”Configure”按钮,如果还没arm-opencv目录,那么会提示新建之。点击”yes”即可。然后弹出下面的对话框。如下面那样选择。然后点击”Next”

ARM opencv环境配置 arm跑opencv_bash_04

3)弹出新的对话框,需要填充的信息如下:

ARM opencv环境配置 arm跑opencv_linux_05

4)点击Finish后,cmake就自动开始工作。

2.2.1、修改cmake的配置

等其停止工作后,会出现下图那样,红了一片。

ARM opencv环境配置 arm跑opencv_linux_06

这里要更改一些东西。

勾上 BUILD_JPEG、BUILD_PNG。如果没有安装tiff,那么取消下面的打勾。

ARM opencv环境配置 arm跑opencv_linux_07

如果想生成静态库,那么就要取消BUILD_SHARED_LIBS的打勾。

如果想生成Debug版本的库文件,那么就要找到CMAKE_BUILD_TYPE选项,改成下图。好像是大小写敏感的,不能写成DEBUG。

ARM opencv环境配置 arm跑opencv_linux_08

除了Debug和Release,还有其他编译类型,这些编译类型会对应不同的编译优化级别。这里还可以看到CMake其他一些选项的意义。

其他的看情况勾选。

找到

ARM opencv环境配置 arm跑opencv_Linux终端下安装cv2_09

把后面的值改成 /usr/local/arm-opencv 如下图所示:

ARM opencv环境配置 arm跑opencv_搜索_10

      

添加多个rootfs的方法

ARM opencv环境配置 arm跑opencv_bash_11

配置完成。

再次点击Configure。如下图所示,可以看到没有了红色。(如果还有,继续按Configure)

如图所示,窗口的中间部分即配置列表,这里和使用cmake命令直接生成makefile文件一致的,如

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

只是这里通过图形界面的方式来进行配置,更加直观方便。

2.2.2、使用cmake生成Makefile文件

现在点击“Generate”按钮,产生Makefile文件。

3、编译和安装

3.1、修改编译配置

输入命令#cd /usr/local/arm-opencv进入到opencv的安装目录下。输入#vim CMakeCache.txt命令,修改该文件。

加上-lpthread –lrt 变成

保存并退出。

3.2、编译文件

再在终端输入#make命令,编译。这个过程要很久时间,目测有20分钟。

3.3、安装OpenCV

接着运行#make install 命令开始安装

到这里就安装完毕了。

(note: lib/*必须移植到板子的/lib目录下)

4、配置OpenCV

4.1、配置pkgconfig

在arm-opencv目录下,输入#mkdir pkgconfig命令新建一个目录pkgconfig, 新建完后,进入这个目录。在这个目录里面输入#vim  arm-opencv.pc创建并编辑文件。编辑这个文件,如下图所示。其中,最后一行是/usr/local/arm-opencv/lib目录里面的所有动态链接库。

保存并退出。

4.2、配置shell

编辑/etc/bash.bashrc文件。使用命令#vim /etc/bash.bashrc。在最后一行加入

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/arm-opencv/pkgconfig

Export PKG_CONFIG_PATH

输入#source /etc/bash.bashrc这个配置信息就可以用了。或者,打开一个新终端,不用输入该命令,也可以使用到该配置信息。

或者使用下面这种方法(只用于lib库)

sudo gedit /etc/ld.so.conf.d/opencv.conf

将以下内容添加到最后:

/usr/local/lib   (库存放的路径,可修改)

接下来配置库:

sudo ldconfig

5、测试使用

创建并编辑一个test.cpp文件

保存,退出后,输入下面命令进行编译

#arm-linux-g++ `pkg-config --cflags arm-opencv` `pkg-config –libs arm-opencv` test.cpp -lpthread –lrt –o test

以后编译arm板的OpenCV代码时,要使用上面的编译指令。其中` 符号不是逗号,而是1 左边的那个符号。而把编译好的程序放到arm板时,在运行之,还要把/usr/local/arm-opencv/lib目录下的所有.so文件都拷贝到arm的/usr/lib或者/lib目录下。原理可以参考《Linux静态库和动态库的使用》。

[pc 上QT与opencv]

安装好了之后在命令行输入命令: sudo gedit /usr/share/qt4/mkspecs/default/qmake.conf

在文件内添加了下面两句:

QMAKE_INCDIR = /usr/include/opencv

QMAKE_LIBS = -lcvaux -lcv -lcxcore -lhighgui -lml

出现问题:

1、

/usr/lib/: could not read symbols: File in wrong format

collect2: ld returned 1 exit status

make[2]: *** [lib/libopencv_highgui.so] 错误 1

make[1]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/all] 错误 2

make: *** [all] 错误 2

主要opencv编译OPENEXR时要用到,所有我就把那个取消了,然后编译就没出现过这个问题。去掉BUILD_OPENEXR 和WIDTH_OPENEXR

2、../../lib/libopencv_ocl.so:undefined reference to 'dlopen'

没有找到dl库,继续修改CmakeCache.txt

CMAKE_EXE_LINKER_FLAGS:STRING=-lpthread

-lrt -ldl

或者去掉相关模块

ARM opencv环境配置 arm跑opencv_ARM opencv环境配置_12

3.

ARM opencv环境配置 arm跑opencv_linux_13

开始是把库放在/usr/lib下的,会报这个错,将库全部放入/lib下就无这个错了,(试过LD_LIBRAYR_PATH无效)

4.

ARM opencv环境配置 arm跑opencv_ARM opencv环境配置_14

ARM opencv环境配置 arm跑opencv_bash_15

ARM opencv环境配置 arm跑opencv_Linux终端下安装cv2_16

5.configure时提示的System is unknown to cmake

出现这个错误的原因是Cmake不能识别arm-linux这种系统,所以我们把他改成Linux,注意第一个字母大写,不能写错linux,否则还会出现那个错误

ARM opencv环境配置 arm跑opencv_linux_17

另外需要注意的是include Mode要选择成Search only in Target Root这样在后面opencv编译时搜索头文件就只会在Target Root指定的文件夹下搜索,而不会到你电脑的usr/include/下搜索,如果这里还是先前的search

in Target Root, then native system则会到/usr/include/下搜索头文件,就会出现一些问题,在我的电脑中出现了下面的问题

usr/include

/bits/和/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root

/usr/include/bits/目录下都有,这个时候优先选择了/usr/include下的mathinline.h,于是编译就出错了,那之前在Operating

System为arm-linux时为什么没有这个错误呢?笔者认为可能是在arm-linux时会默认先搜索电脑中配置的arm-linux的路径也就是/opt/FriendlyARM/toolschain/4.5.1/下的include文件夹,而如果设置成Linux则优先搜索/usr/include。因此要将include

Mode选择成Search only in Target Root,这样编译的时候就只会在/opt/FriendlyARM/toolschain/4.5.1/文件夹下搜索头文件了。

6. error

ARM opencv环境配置 arm跑opencv_搜索_18

7.error

ARM opencv环境配置 arm跑opencv_bash_19