迅为iTOP-4412开发板图像识别项目实战-移植opencv(四)
因为我要用opencv获取摄像头并拍照,这里我使用的是opencv来实现的,同时也方便大家以后对opencv的学习,所以我们要先编译opencv库。
环境:迅为提供的ubuntu16.04
编译器:arm-linux-4.4.1.tar.gz
opencv 版本:opencv-2.4.9.zip
平台:迅为iTOP-4412开发板
一.安装编译器
将arm-linux-4.4.1.tar.gz拷贝到ubuntu的/usr/local/arm下面并解压,如下图所示:
输入命令 vi ~/.bashrc 打开环境变量,添加以下环境变量并注释掉2014的环境变量,如下图所示:
更新一下环境变量,如下图所示,使用命令“source .bashrc ”更新环境变量,并重启ubuntu。
重启成功后,输入arm,双击tab,如果显示只有一个4.4.1则正确,如果显示还有其他版本则不正确。如下图所示:
二.opencv 移植
将文件中提供的“opencv-2.4.9.zip”即 opencv 源码包解压,并将其移至 ubuntu 下,作者将该文件放入了“/home/baidu/opencv”下,如下图所示:
输入命令unzip opencv-2.4.9.zip 解压并进去解压生成的文件夹,如果没有unzip这个软件可以先使用apt-get命令安装一下。
OpenCV 2.2 以后版本需要使用 Cmake 生成 makefile 文件,因此需要先安装 cmake。
ubuntu 下安装 cmake 比较简单,使用命令“apt-get install cmake”和”apt-get install cmake-qt-gui“如下图所示
安装val/v4l2等必要的依赖库,一定要在编译opencv之前安装,否则在编译opencv的时候不会被编译进去。
apt-get install v4l2ucp v4l-utils libv4l-dev
使用命令“cmake-gui”打开 cmake 的 gui 界面,开始进行配置。如下图示所示
我们在“where is the source code”中填入电脑中 opencv 源码的位置,“where tobuild the binaries”填入生成 make 编译文件的位置,然后点击 configure 按钮。如下图所示。
选择最后一项,然后点击 next,如下图所示。
Operating System 选择目标系统“Linux”,Compilers 中选择交叉编译器的 gcc 和g++,如下
/usr/local/arm/4.4.1/bin/arm-none-linux-gnueabi-gcc
/usr/local/arm/4.4.1/bin/arm-none-linux-gnueabi-g++
Target Root 选择交叉编译器的路径“/usr/local/arm/4.4.1”,include Mode 选择“search only in target root”。点击 finish。如下图所示。
此时主界面如下图所示,这时 Cmake 会读取程序的一些配置信息,可以再下图红框中对每一个编译选项进行修改,将 CMAKE_INSTALL_PREFIX 改成你想要的路径,作者改成了“/usr/local/opencv-2.4.9”,这里去掉 WITH_TIFF,WITH_CUDA 及 WITH_GTK。如下图所示。
设置完成后,点击configure和enerate,并退出。
在编译路径/opt/opencv_arm 下就生成了 Makefile。关闭后我们使用“cd /opt/opencv-arm/”命令进入“/opt/opencv_arm”,在执行 Makefile 之前需要修改 CMakeCache.txt 文件的 194 行。使用命令“vi CMakeCache.txt”编辑文本。如下图所示。
跳转至 194 行。将“CMAKE_EXE_LINKER_FLAGS:STRING=' '”改为
“CMAKE_EXE_LINKER_FLAGS:STRING=-lpthread -lrt -ldl”如下图所示。
编译 libv4l库,将libv4l-0.6.4.tar.gz压缩包拷贝到ubuntu目录,这里作者拷贝到了
/home/baidu/opencv下面,如下图所示:
把资料中的videodev.h头文件拷贝拷贝到Ubuntu的/usr/include/linux/下面,如下图所示:
进入解压libv4l库生成的目录,打开makefile
在顶层Makefile添加以下命令:
CC=arm-none-linux-gnueabi-gcc
同样,我们进入libv4l1和libv4l2和libv4lconvert文件夹下,同样每个文件夹对应的makefile里面添加CC=arm-none-linux-gnueabi-gcc
修改完成后,我们回到libv4l-0.6.4下,依次输入以下命令:
mkdir tmp
make
make install PREFIX=$PWD/tmp
编译成过以后,我们进入我们创建的tmp文件夹的lib目录下,输入命令file *.*,查看我们编译的库是否为ARM的,如果是则正确,如下图所示:
编译成功以后,输入以下命令把库和头文件复制到交叉编译链里相应的路径中:
cp -r include/* /usr/local/arm/4.4.1/arm-none-linux-gnueabi/include/
cp -r lib/* /usr/local/arm/4.4.1/arm-none-linux-gnueabi/lib
如下图所示:
输入以下命令, 再把编译生成的lib库复制到opencv的安装路径下:
cp -r lib/* /opt/opencv-arm/lib
如下图所示:
输入命令”cd /opt/opencv-arm/“,回到opencv编译目录,输入make,如下所示:
编译完成之后。会显示进度为百分之百,如下图所示:
编译完成之后。使用指令“make install”编译完成之后。使用指令“make install”
我们可以在“/usr/local/opencv-2.4.9/”目录下看到编译生成的库文件。至此,移植工作基本完成。
关注“迅为电子”公众号,了解更多嵌入式资讯。
转自:topeetboard.com