1. 程式人生 > >移植opencv2.4.9到itop4412開發板

移植opencv2.4.9到itop4412開發板

OpenCV是目前開源專案中最著名的基於機器視覺方向的影象處理的開發包,目前已經有被移植到嵌入式Linux環境上。本文介紹了OpenCV交叉編譯的基本步驟。
在opencv交叉編譯之前要先進行依賴庫的交叉編譯,然後才能進行opencv庫的交叉編譯(因為opencv依賴於很多庫函式,如果不編譯會造成,編譯後的opencv無法使用)這裡首先給出OpenCV交叉編譯時各個庫的依賴關係:
OpenCV
|——–zlib
|——–jpeg
|——–libpng
|——–zlib
|——–tiff
|——–zlib
|——–ffmpeg
|——–x264
|——–xvidcore

其中各個原始碼包之間的依賴關係還是有一定的講究,否則很容易編譯努通過,這裡建議下載較新的穩定版進行交叉編譯,下面列出了本人的配置環境:
一、編譯環境及庫檔案
linux環境:ubuntu12.04
交叉編譯:4.3.2
arm板子: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

修改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 –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

#

注意:
在繼續下一步之前需要拷貝之前編譯好的庫即每個-install/lib/下的檔案到/usr/local/arm/4.3.2/arm-none-linux-gnueabi/opencv-depend下面不然後面會提示找不到庫(多謝群裡的朋友反映這個問題)
(–extra-cflags=”-l usr/local/arm/4.3.2/arm-none-linux-gnueabi/opencv-depend”
這個命令制定了依賴庫目錄路徑以供configure查詢)

#

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 –extra-cflags=”-L usr/local/arm/4.3.2/arm-none-linux-gnueabi/opencv-depend”

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 ../

11.配置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

12.最後
還有一步特別關鍵 ,需要把/usr/local/arm/opencv-install/lib 下所有的動態連結庫 拷貝到交叉編譯下/usr/local/arm/4.3.2/arm-non-linux-gnueabi/lib下

三、測試

測試程式:(qt設定)
新增庫目錄
開啟video4
設定如圖
四.拷貝到開發板執行
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://download.csdn.net/detail/engineer_wjr/9419761
交叉編譯好的依賴庫在這裡
http://download.csdn.net/detail/engineer_wjr/9419761