首先要看Opencv在嵌入式arm開發的移植過程的話,網上有很多這方面的移植編譯方法都是比較老的,而且多數都是針對OpenCV 1.0的,他的方法很麻煩,很容易出錯,在這里我來說一下我的方法,沒有那么麻煩,都是盡可能利用現成的工具,盡量圖形化界面配置操作,方便編譯配置。
接下來,我就詳細的來讓你學會Opencv在嵌入式ARM開發移植的詳細過程,可以收藏哦。
軟硬件環境
宿主機:Ubuntu 12.04 32bit
開發板:OK6410
OpenCV: 2.4.3
其他:
arm-linux-g++ 4.3.2 / arm-linux-gcc 4.3.2
CMake-gui 2.8.10
Cmake的安裝
OpenCV 2.2以后版本需要使用Cmake生成makefile文件,因此需要先安裝cmake。
ubuntu下安裝cmake比較簡單,
apt-get install cmake
如果覺得自帶的版本不符合要求,可以下載安裝包。
下載最新版的安裝包:
//www.cmake.org/cmake/resources/software.html
這里是已經編譯好的,你可以直接下載解壓到你所需要的目錄下就好了:
tar zxvf cmake-2.8.10.2-Linux-i386.tar.gz –C /usr/local/
設置環境變量:
sudo gedit /home/emouse/.bashrc
在打開的文件后添加:
export PATH=$PATH:/usr/local/cmake-2.8.10.2-Linux-i386/bin
查看版本,測試是否安裝成功:
root@emouse:/home# cmake --version
cmake version 2.8.10.2
OpenCV 的交叉編譯
解壓OpenCV壓縮文件,得到文件夾。
#cmake-gui 打開cmake的gui界面,開始進行配置,配置過程如下圖所示:
1、選定解壓后的源文件和將要編譯的文件目錄,這個自己之前先建好。
2、點擊Configure 選擇工程類型,選擇交叉編譯,點擊下一步。
3、在下圖的界面中選擇交叉編譯工具鏈以及庫文件相關信息,按照圖中的進行填寫,其中紅框部分為交叉編譯工具鏈的實際路徑,根據宿主機實際安裝路徑填寫。
4、點擊Finsh完成初步配置。
5、在這個時候主界面如下圖所示,這時Cmake會讀取程序的一些配置信息,可以再下圖紅框中對每一個編譯選項進行修改,這里去掉WITH_TIFF支持并修改安裝路徑,其他配置可以根據需求選擇。
通過終端進入OpenCV-ARM目錄,make編譯,編譯過程中出錯如下:
Linking CXX executable ../../bin/opencv_perf_core../../lib/libopencv_highgui.so: undefined reference to `_TIFFmemcpy'../../lib/libopencv_core.so: undefined reference to `pthread_spin_init'../../lib/libopencv_core.so: undefined reference to `pthread_spin_unlock'../../lib/libopencv_highgui.so: undefined reference to `_TIFFmemset'../../lib/libopencv_highgui.so: undefined reference to `_TIFFwarningHandler'../../lib/libopencv_core.so: undefined reference to `pthread_key_create'../../lib/libopencv_highgui.so: undefined reference to `_TIFFmemcmp'../../lib/libopencv_core.so: undefined reference to `pthread_getspecific'../../lib/libopencv_highgui.so: undefined reference to `_TIFFfree'../../lib/libopencv_ts.so: undefined reference to `pthread_key_delete'../../lib/libopencv_core.so: undefined reference to `pthread_spin_lock'../../lib/libopencv_highgui.so: undefined reference to `_TIFFmalloc'../../lib/libopencv_highgui.so: undefined reference to `TIFFOpen'../../lib/libopencv_core.so: undefined reference to `pthread_spin_destroy'../../lib/libopencv_core.so: undefined reference to `pthread_once'../../lib/libopencv_highgui.so: undefined reference to `_TIFFrealloc'../../lib/libopencv_core.so: undefined reference to `clock_gettime'../../lib/libopencv_core.so: undefined reference to `pthread_spin_trylock'../../lib/libopencv_highgui.so: undefined reference to `_TIFFerrorHandler'../../lib/libopencv_core.so: undefined reference to `pthread_setspecific'collect2: ld returned 1 exit statusmake[2]: *** [bin/opencv_perf_core] 錯誤 1make[1]: *** [modules/core/CMakeFiles/opencv_perf_core.dir/all] 錯誤 2make: *** [all] 錯誤 2
關于上面的報錯,就是因為我們在開始的時候勾選了tiff支持,但是這個支持是要宿主機中安裝相應程序的,所以才會報錯,解決方法就是你打開cmake去掉勾選就可以看,如果還有其他報錯的話,可以通過下面方式查找會有以下解釋:
編譯時發現如下錯誤:
Linking CXX executable ../../bin/opencv_createsamples
../../lib/libcxcore.so: undefined reference to `clock_gettime'
../../lib/libcxcore.so: undefined reference to `pthread_key_create'
../../lib/libcxcore.so: undefined reference to `pthread_getspecific'
../../lib/libcxcore.so: undefined reference to `pthread_setspecific'
原因是cmake不認識我定義的arm-linux系統標記,沒有加上庫pthread和rt的鏈接選項
此時需要修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原來為空,加上-lpthread -lrt
按照此方法更改對應文件,如下圖所示:
此處在CMakeCache.txt 的173行,添加-lpthread -lrt,然后繼續編譯。編譯過程十來分鐘左右,編譯成功結果如下:
運行make install進行安裝,在我的安裝目錄中就會多出以下幾個文件夾:
lib文件夾即生成的庫文件,拷貝到開發板對應目錄即可。
通過上述的這些步驟,你所需要的就完成了,其實我的這個方法也是比較容易一些的,不會那么繞,復雜,如果在其中出錯了,跟著我的步驟一步一步檢查,那會很快找到問題所在的,希望對你們有幫助哦。