首先有一个arm的开发板(我的是DE1-SoC Cyclone V),所需的系统镜像文件(ubuntu12.04),及烧写SD卡工具(Win32DiskImager),编译好的OpenCV程序包。这些软件可以在这里下载到下载链接。
所需的工具是Win32DiskImager及DE1_SoC_UBUNTU.img镜像文件,以及一个大于8G的SD卡。
首先在PC机上安装好Win32DiskImager镜像烧写工具,双击安装即可。
下面是将DE1_SoC_SD.img 镜像烧写入microSD card 的步骤:
点选 “write”后 开始刻录image 文件进入microSD card。 等待烧入完成后即可移除microSD card。
在DE1-SoC 板卡上运行Linux的步骤如下:
进入linux系统之后你会发现,其实现在装载的Linux系统只是利用了SD的很小空间,大概只有不到3G的样子,我们接下来需要吧SD卡的剩余空间也挂载到这个系统中,防止以后系统空间不足。
我们的想法是把剩余的空间挂载到/usr
目录下,具体操作步骤如下:
先利用fdisk -l
查看一下分区的情况如下:
针对未分配的空间可以在其上先建立一个新的分区,然后再格式化,具体步骤:
fdisk /dev/mmcblk0
m #帮助信息
n #添加一个分区
p #主分区
Enter #输入两个Enter键
Enter
w #保存新建的分区
reboot #重启是新建的分区的数据写入数据表中
重启之后需要对刚才新建的分区进行格式化:
fdisk -l #查看分区情况
mkfs -t ext4 /dev/mmcblk0p4 #将新建的分区/dev/mmcblk0p4格式化为ext4格式,需要一些时间
至此,我们把SD的剩余空间新建为了一个新的分区!
首先我们需要把/usr目录下的内容做一个备份,我们就把其备份到新建的分区上,具体的操作步骤如下:
cd /mnt
mkdir tmp #在mnt文件夹下新建一个文件夹,用于新建分区的临时挂载点
mount /dev/mmcblk0p4 /mnt/tmp #将新建的分区挂载到/mnt/tmp文件夹下
cp -ax /usr/* /mnt/tmp #拷贝/usr下的内容到新的分区中
ls -l /dev/disk/by-uuid #查看分区的UUID
修改/etc/fstab中/usr的挂载方式,挂载到新的/usr分区上
mv /usr /usr.old #重命名现有的/usr
mkdir /usr #创建新的挂载点
reboot #重启完成
第6步中,修改/etc/fstab中/usr的挂载方式,需要用vim查看/etc/fstab文件内容并进行修改,如下图所示:
只需要添加一行代码
UUID=ead81afa-f104-404a-95b4-18f8c914f397 /usr ext4 defaults 1 2
#注意UUID设置为自己查看到的UUID号
至此,分区的挂载大功告成!!!
下面我们需要为OpenCV的安装配置做一些准备工作,安装一些编译工具及图像操作支持库。
但是,目前的软件包管理源可能不完全,我们首先需要为系统添加几个软件下载源,具体的操作如下:用vim打开/etc/apt/sources.list文件,添加下边的几行代码
deb http://cn.ports.ubuntu.com/ubuntu-ports/ precise main restricted
deb-src http://cn.ports.ubuntu.com/ubuntu-ports/ precise main restricted
deb http://cn.old-releases.ports.ubuntu.com/ubuntu-ports/ precise main restricted
deb-src http://cn.old-releases.ports.ubuntu.com/ubuntu-ports/ precise main restricted
下面开始支持库的安装:
apt-get update
apt-get upgrade #可能需要较长的时间,耐心等待
apt-get install build-essential
apt-get install pkg-config
apt-get install libgtk2.0-dev
apt-get install libjpeg.dev
apt-get install libavcodec-dev
apt-get install libavformat-dev
apt-get install libtiff4.dev
apt-get install libswscale-dev
apt-get install libjasper-dev
现在我们正式开始OpenCV的安装配置:
一般来说我们首先需要交叉编译一下opencv源码,得到arm平台能识别的代码(具体的交叉编译过程参考这里),我们这里已经交叉编译好了一个版本的OpenCV,可以直接下载(这个版本的opencv是利用opencv-2.4.10的源码在ubuntu12.04系统中交叉编译完成的)。
下面需要把下载好的opencv-lib-arm.tar.gz拷贝到arm平台中:
mount /dev/sda1 /mnt/tmp
(当然这里的sda1需要更具你的U盘在系统中的代号确定,有可能是sda1~4等等,你可以进入/dev目录中查看)cd /usr/local
mkdir app #我们要将文件拷贝到/usr/local/app文件夹下
cp /mnt/tmp/opencv-lib-arm.tar.gz /usr/local/app
cd app
ls #可以看到文件已经拷贝到系统
umount /mnt/tmp #卸载U盘
4.解压opencv-lib-arm.tar.gz文件
tar -zxvf opencv-lib-arm.tar.gz
ls #查看文件下的内容,可以看到opencv-lib-arm文件夹
下面开始opencv的配置
cd /etc/ld.so.conf.d
vim opencv.conf
添加如下内容: /usr/local/app/opencv-lib-arm/lib
然后执行ldconfig
命令,使之生效。
vim /etc/bash.bashrc
在文件最后添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/app/opencv-lib-arm/lib/pkgconfig
export PKG_CONFIG_PATH
保存之后,执行source /etc/bash.bashrc
命令,使之生效。
至此,OpenCV的移植、配置全部完成!!!
下面利用一段小程序测试opencv是否安装正确:
测试的源程序文件如下:
main.cpp
#include
#inluce
#include "fstream"
using namespace std;
using namespace cv;
int main()
{
Mat img;
img=Mat::ones(1000,1000,CV_8U);
img=img*255;
imshow("a white picture",img);
waitKey(1000);
getchar();
return 0;
}
进入到存放main.cpp文件的文件夹下,执行下面的命令,对程序进行编译:
gcc main.cpp -o run -lpthread -lrt `pkg-config --libs --cflags opencv`
其中gcc是编译用的编译器;main.cpp为要进行编译的程序;run为编译之后生成的可执行二进制程序,可以任意命名。
然后执行下面的命令
./run
若出现一张白图说明opencv配置成功。