OpenCV是目前開源項(xiàng)目中最著名的基于機(jī)器視覺方向的圖像處理的開發(fā)包,目前已經(jīng)有被移植到嵌入式Linux環(huán)境上。本文介紹了OpenCV交叉編譯的基本步驟。 一、編譯環(huán)境及庫(kù)文件
linux環(huán)境:ubuntu12.04
交叉編譯:4.3.2
arm板子:iTOP4412開發(fā)板
libz:
libjpeg:
libpng:
libyasm:
opencv:
libx264:
libxvid:
lffmpeg:
cmake:
二、opencv-2.4.9的移植過(guò)程
1、libz的交叉編譯:
# ./configure --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/zlib-install --shared
修改makefile
CC=arm-linux-gcc
AR=arm-linux-ar
RANLIB=arm-linux-ranlib
CDSHARED=arm-linux-gcc -shared -wl, -soname,libz.so.1,--version-script,zl lib.map (不一樣沒關(guān)系只改前面編譯器)
#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
**************************************************************************
到此所有依賴庫(kù)編譯安裝完成
安裝目錄在:/usr/local/arm/4.3.2/arm-none-linux-gnueabi/
每個(gè)庫(kù)有各自的-install文件夾
新建文件夾
#mkdir /usr/local/arm/4.3.2/arm-none-linux-gnueabi/opencv-depend/
然后拷貝所有-install下的lib下的文件到opencv-depend目錄下
***************************************************************************
8.cmake-gui安裝(自己下載)
到官網(wǎng)上下載已經(jīng)編譯好的cmake-2.8.8-Linux-i386.tar,gz,解壓就可以了
9、opencv2.4.9的交叉編譯:
用到的主要目錄說(shuō)明:
交叉編譯工具鏈所在目錄 /usr/local/arm/4.3.2/
安裝opencv的目錄 /usr/local/arm/opencv-install
opencv源碼所在目錄 /usr/local/arm/opencv2.4.9
編譯好的opencv庫(kù)所在目錄 /usr/local/arm/opencv-2.4.2/build
10.配置cmake(這一步的目的是配置編譯器并讓cmake-gui找到所有共享庫(kù)不然cmake-gui會(huì)少很多選項(xiàng)因?yàn)闆]有發(fā)現(xiàn)依賴庫(kù),例如你直接cmake-gui就沒有v4l選項(xiàng),直接導(dǎo)致移植成功后無(wú)法打開攝像頭,別問我是怎么知道的..說(shuō)多了都是淚啊)
#cd opencv-2.4.9
#mkdir build
#cd build
#vim toolchain.cmake
內(nèi)容如下
###########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 )
######################################
然后執(zhí)行這一步
#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
點(diǎn)擊Configure,保持generator為Unix Makefiles(不用改),選擇Specify options for cross-compiling(最后一個(gè)選項(xiàng)),點(diǎn)擊Next,
Operating System填寫arm-linux
C Compilers填寫/usr/local/arm/4.3.2/bin/arm-linux-gcc
C++ Compilers填寫/usr/local/arm/4.3.2/bin/arm-linux-g++
程序庫(kù)的Target Root填寫/usr/local/arm/4.3.2/
然后點(diǎn)擊Finish。
默認(rèn)安裝目錄為/usr/local,改為/usr/local/arm/opencv-install(因?yàn)橹鞍惭b了x86的opencv在usr/local為了避免弄混了)
CMAKE_INSTALL_PREFIX /usr/local/arm/opencv-install
修改選項(xiàng)(如果不改make會(huì)出現(xiàn)很多錯(cuò)誤因?yàn)檎也坏綆?kù))
去掉WITH_CUDA
去掉WITH_GTK
去掉WITH_1394
去掉WITH_GSTREAMER
去掉WITH_LIBV4L(后邊有v4l這個(gè)沒用不要選)
去掉WITH_TIFF
去掉BUILD_OPENEXR
去掉WITH_OPENEXR
去掉BUILD_opencv_ocl
去掉WITH_OPENCL
完成后Generate
修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原來(lái)為空,加上-lpthread -lrt,
點(diǎn)擊Generate生成Makefile。(203行附近有小引號(hào)可以帶著像這樣'-lpthread -lrt')
#make(出現(xiàn)錯(cuò)誤一般是選多了或者前面做錯(cuò)了make clean)
#make install
************************************************************************************************
最后
還有一步特別關(guān)鍵 ,需要把/usr/local/arm/opencv-install/lib 下所有的動(dòng)態(tài)鏈接庫(kù) 拷貝到交叉編譯下/usr/local/arm/4.3.2/arm-non-linux-gnueabi/lib下
************************************************************************************************
三、測(cè)試
測(cè)試程序:(qt設(shè)置)
![]()
![]()
![]()
四.拷貝到開發(fā)板運(yùn)行
1.將/usr/local/arm/opencv-install/lib/下的庫(kù)拷貝到開發(fā)板/lib/下
2.#mkdir /usr/local/arm/opencv-install/lib/
并拷貝上述庫(kù)到mkdir /usr/local/arm/opencv-install/lib/
3.拷貝opencv-depend下庫(kù)到開發(fā)板/lib/下
4.拷貝測(cè)試程序到開發(fā)板/bin/目錄下賦予可執(zhí)行權(quán)限chmod 777 CamaraGet
5. cd /bin/
./ CamaraGet –qws &
(如果提示庫(kù)找不到原因是你編譯的庫(kù)建立了類似快捷方式的東西而你拷貝的庫(kù)沒有拷貝快捷方式所以程序連接的時(shí)候找不到快捷方式,可以將你的庫(kù)改名成提示缺少的庫(kù)名(快捷方式名)基本上就是去掉版本后綴例如
( mv libopencv_core.so.2.4.9 libopencv_core.so.2.4 )
以下是文件目錄示例
五.說(shuō)明
開發(fā)板USB攝像頭預(yù)覽節(jié)點(diǎn)是/dev/video4 opencv調(diào)cam = cvCreateCameraCapture(204); 這個(gè)函數(shù)的意思是打開video4網(wǎng)上很多討論括號(hào)里的參數(shù)只要有: 0 , -1, 202單要根據(jù)你自己的情況改,實(shí)測(cè)204(在板子上可以)
|