OpenCV
是目前开源项目中最著名的基于机器视觉方向的图像处理的开发包,目前已经有被移植到嵌入式Linux环境上。本文介绍了OpenCV交叉编译的基本步骤。一、编译环境及库文件linux
环境:ubuntu12.04交叉编译:
4.3.2arm
板子:iTOP4412开发板 libz: libjpeg: libpng: libyasm: opencv: libx264: libxvid: lffmpeg: cmake: 二、
opencv-2.4.9的移植过程1
、libz的交叉编译:# ./configure --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/zlib-install --shared 修改
makefileCC=arm-linux-gccAR=arm-linux-arRANLIB=arm-linux-ranlibCDSHARED=arm-linux-gcc -shared -wl, -soname,libz.so.1,--version-script,zl lib.map (不一样没关系只改前面编译器
)#make #make install 2
、libjpeg的交叉编译:#./configure --host=arm-linux --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libjpeg-install --enable-shared --enable-static#make#make install 3
、libpng的交叉编译:#./configure --host=arm-linux --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libpng-install --enable-shared --enable-static #make#make install 4
、yasm的交叉编译: #./configure --host=arm-linux --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/yasm-install --enable-shared --enable-static#make#make install 5
、libx264的交叉编译:#CC=arm-linux-gcc ./configure --enable-shared --host=arm-linux --disable-asm --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libx264-install#make#make install 6
、libxvid的交叉编译:#cd build/generic#./configure --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libxvid-install --host=arm-linux --disable-assembly#make#make install 7
、ffmpeg的交叉编译:./configure --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/ffmpeg-install --enable-shared --disable-static --enable-gpl --enable-cross-compile --arch=arm --disable-stripping --target-os=linux --enable-libx264 --enable-libxvid --cc=arm-linux-gcc --enable-swscale#make#make install **************************************************************************到此所有依赖库编译安装完成安装目录在
:/usr/local/arm/4.3.2/arm-none-linux-gnueabi/每个库有各自的
-install文件夹新建文件夹#mkdir /usr/local/arm/4.3.2/arm-none-linux-gnueabi/opencv-depend/然后拷贝所有
-install下的lib下的文件到opencv-depend目录下***************************************************************************8.cmake-gui
安装(自己下载)到官网上下载已经编译好的
cmake-2.8.8-Linux-i386.tar,gz,解压就可以了 9
、opencv2.4.9的交叉编译:用到的主要目录说明:交叉编译工具链所在目录
/usr/local/arm/4.3.2/安装
opencv的目录 /usr/local/arm/opencv-installopencv
源码所在目录 /usr/local/arm/opencv2.4.9编译好的
opencv库所在目录 /usr/local/arm/opencv-2.4.2/build 10.
配置cmake(这一步的目的是配置编译器并让cmake-gui找到所有共享库不然cmake-gui会少很多选项因为没有发现依赖库,例如你直接cmake-gui就没有v4l选项,直接导致移植成功后无法打开摄像头,别问我是怎么知道的..说多了都是泪啊) #cd opencv-2.4.9#mkdir build#cd build#vim toolchain.cmake内容如下 ###########user defined#############set( CMAKE_SYSTEM_NAME Linux )set( CMAKE_SYSTEM_PROCESSOR arm )set( CMAKE_C_COMPILER arm-none-linux-gnueabi-gcc )set( CMAKE_CXX_COMPILER arm-none-linux-gnueabi-g++ )###########user defined#############set( CMAKE_FIND_ROOT_PATH" /usr/local/arm/4.3.2/arm-none-linux-gnueabi/opencv-depend/ " )set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )######################################然后执行这一步#cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake ../ 配置
cmake-gui#cmake-gui
选择源代码目录
/usr/local/arm/opencv-2.4.9/选择
Build目录:/usr/local/arm/opencv-2.4.2/build点击
Configure,保持generator为Unix Makefiles(不用改),选择Specify options for cross-compiling(最后一个选项),点击Next,Operating System
填写arm-linuxC Compilers
填写/usr/local/arm/4.3.2/bin/arm-linux-gccC++ Compilers
填写/usr/local/arm/4.3.2/bin/arm-linux-g++ 程序库的
Target Root填写/usr/local/arm/4.3.2/然后点击
Finish。 默认安装目录为
/usr/local,改为/usr/local/arm/opencv-install(
因为之前安装了x86的opencv在usr/local为了避免弄混了)CMAKE_INSTALL_PREFIX /usr/local/arm/opencv-install修改选项
(如果不改make会出现很多错误因为找不到库) 去掉
WITH_CUDA 去掉
WITH_GTK 去掉
WITH_1394 去掉
WITH_GSTREAMER 去掉
WITH_LIBV4L(后边有v4l这个没用不要选) 去掉
WITH_TIFF 去掉
BUILD_OPENEXR 去掉
WITH_OPENEXR 去掉
BUILD_opencv_ocl 去掉
WITH_OPENCL 完成后
Generate 修改
CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt,点击
Generate生成Makefile。(203行附近有小引号可以带着像这样'-lpthread -lrt') #make(
出现错误一般是选多了或者前面做错了make clean)#make install************************************************************************************************最后还有一步特别关键 ,需要把
/usr/local/arm/opencv-install/lib 下所有的动态链接库 拷贝到交叉编译下/usr/local/arm/4.3.2/arm-non-linux-gnueabi/lib下************************************************************************************************三、测试 测试程序:
(qt设置
) 四
.拷贝到开发板运行1.
将/usr/local/arm/opencv-install/lib/下的库拷贝到开发板/lib/下2.#mkdir /usr/local/arm/opencv-install/lib/并拷贝上述库到mkdir /usr/local/arm/opencv-install/lib/3.拷贝opencv-depend下库到开发板
/lib/下4.
拷贝测试程序到开发板/bin/
目录下赋予可执行权限chmod 777 CamaraGet5. cd /bin/ ./ CamaraGet –qws &(如果提示库找不到原因是你编译的库建立了类似快捷方式的东西而你拷贝的库没有拷贝快捷方式所以程序连接的时候找不到快捷方式
,可以将你的库改名成提示缺少的库名(
快捷方式名)基本上就是去掉版本后缀例如( mv libopencv_core.so.2.4.9 libopencv_core.so.2.4 )以下是文件目录示例
五
.说明开发板
USB摄像头预览节点是/dev/video4 opencv调cam = cvCreateCameraCapture(204); 这个函数的意思是打开video4网上很多讨论括号里的参数只要有
: 0 , -1, 202
单要根据你自己的情况改,实测204(
在板子上可以)