OpenCV 是目前開源項目中最著名的基於機器視覺方向的圖像處理的開發包,目前已經有被移植到嵌入式 Linux 環境上。本文介紹了 OpenCV 交叉編譯的基本步驟。
一、編譯環境及庫文件
linux 環境:ubuntu12.04
交叉編譯:4.3.2
arm 板子:iMX6開發板
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
修改 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 (不一樣沒關系只改前面編譯器)
#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 --en
#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-install
opencv 源碼所在目錄 /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-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++
程序庫的 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 CamaraGet
5. 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(在板子上可以)








轉自:http://www.topeetboard.com
