把OpenCV移植到ZedBoard上的那些事

2021-07-14 22:29:05 字數 3332 閱讀 6101

前面我們已經基本了解了什麼是opencv,這一片我們首先明確,移植opencv到zedboard上需要兩大過程。

1、opencv在ubuntu上的安裝與測試

2、opencv在zedboard上的移植與測試

我們直接說第二步,第一步網上有許多教程。

我們首先要明確:移植opencv需要在交叉編譯環境已經搭建好的基礎下進行。

我們都知道pc的可執行程式不能直接在arm板卡上執行,pc機與arm採用的就體系結構不同,兩個可以執行的二進位制**不一樣,要是使用還是有辦法的,那就是交叉編譯,交叉編譯的目的就是在主機上生成目標機(zedboard)能執行的檔案。其實zedboard已經將交叉編譯的檔案給我們了,只需要執行幾個簡單的指令就可以了。

用  ./xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin 安裝檔案會出現錯誤,

在終端裡輸入如下命令 dpkg-reconfigure dash,並且在彈出的對話方塊裡選擇 《否》即可

可以安裝的時候,就一路預設下去吧,不過這個時候最好注意下檔案安裝到哪個地方了。

這個時候你就可以找到類似於gcc一樣的交叉編譯工具了

在ubuntu中,環境變數的檔案是 /etc/bash.bashrc,修改這個檔案就行了(命令vim /etc/bash.bashrc),增加的內容是

export arch=arm

export cross_compile=arm-xilinx-linux-gnueabi-

export path=/root/codesourcery/sourcery_codebench_lite_for_xilinx_gnu_linux/bin/:$path

此時儲存檔案,並且關閉終端,重新開啟乙個終端 輸入arm-xilinx 按幾下tab鍵是不是顯示出來了可愛的交叉編譯鏈。到此說明交叉編譯鏈安裝完成

交叉編譯鏈安裝成功了,就可以交叉編譯c檔案了,進入到/opt/zedboard/code/資料夾下面,使用arm-xilinx-linux-gnueabi-gcc helloworld.c -o helloworld_zed,來生成在zed板卡上能執行的檔案。

到這裡我們只是安裝好了交叉編譯鏈,接下來就讓我們把opencv移植過來吧。

進入opencv3.1.0目錄, 新建乙個build和install目錄,並且新建乙個toolchain.cmake檔案,輸入:

set(cmake_system_name linux)

set(cmake_system_processor arm)

set(cmake_c_compiler arm-xilinx-linux-gnueabi-gcc)

set(cmake_cxx_compiler arm-xilinx-linux-gnueabi-g++)

進入build目錄,輸入

cmake -d cmake_toolchain_file=toolchain.cmake -d
cmake_install_prefix=/opt/zedboard/opencv_zed/opencv-3.1.0/install   ../

接著進行ccmake ./ 配置,配置的內容與pc機上有很大區別,將所有with開頭的選項選成off(除了with_v4l為on)

因為這些需要第三方庫支援的,要是選擇這些的話就需要安裝第三方庫了。按 c 鍵配置 按g鍵生成並儲存

開始進行 make 編譯  然後make install 安裝。

安裝完成後在install的資料夾裡就是執行庫啦。

zedboard板子裝的linux系統一般是官方給的oob安裝包,實際上是ramdisk映象,乙個非常簡易的linux作業系統,最大只能有8m。我們在測試的過程中要可執行檔案與opencv的動態庫拷貝到sd卡,或u盤,而庫檔案會大於8m,所以需要將opencv鏈結庫檔案壓縮為乙個映象檔案。

製作映象檔案的方法:

cd   /opt/zedboard/opencv_zed/

dd if=/dev/zero of=qt_lib.img bs=1m count=80//這裡的

count與bs組合起來表示製作80m的映象,具體可以根據實際鏈結庫總的大小來設定count

mkfs.ext2 -f cv_lib.img

chmod go+w cv_lib.img

mount cv_lib.img -o loop /mnt

cp /opt/zedboard/opencv_zed/opencv-3.1.0/install/* /mnt

chmod go-w cv_lib.img

umount /mnt

我們會發現多出乙個cv_lib.img檔案,這是需要拷貝到zedboard上的庫檔案。

測試**我們採用陸佳華書上的edge_detection.cpp

進行交叉編譯:輸入

arm-xilinx-linux-gnueabi-g++  -i /opt/zedboard/opencv_zed/opencv-3.1.0/install/include  -i/opt/zedboard/opencv_zed/opencv-3.1.0/install/include/opencv -l/opt/zedboard/opencv_zed/opencv-3.1.0/install/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann ./edge_detection.cpp -o ./edge_detection.o

最後我們將 edge_detection.o、 cv_lib.img 、lena.bmp拷貝到sd卡或者u盤裡,然後開始測試。

使用u盤啟動

啟動好zedboard後,cd /dev ;ls 下, 看dev檔案裡是否多出sda,sda(1,2,3,4)裝置檔案。 下面將u盤進行掛載

mount /dev/sda(1,2,3,4)  /mnt

cd /usr

mkdir lib

再將庫檔案掛載到/usr/lib下,  mount  /mnt/cv_lib.img /usr/lib

檢視 /usr/lib 是否多出一些庫, 如沒有,多試幾次上面的命令

下面開始執行,進入到/mnt目錄下:

./edge_detection.o lena.bmp lena_edge.bmp

如果出現successful 就說明編譯成功,邊緣影象生成。

參考資料:

這裡有一種使用sd卡啟動的示例:

移植opencv到ARM開發板

安裝交叉編譯鏈 我使用的是arm linux gcc 4.3.2,解壓到目錄 usr local arm 4.3.2,然後在環境變數path中增加 usr local arm 4.3.2 bin 安裝cmake opencv 2.0之後的版本,必須使用cmake建立makefile。我使用的cmak...

移植 OpenCV到ARM開發板

交叉編譯opencv依賴庫 交叉編譯opencv依賴庫 1.libz 的交叉編譯 configure prefix opt opencv arm open shared 修改 makefile cc arm linux gcc ar arm linux ar ranlib arm linux ran...

打算把twisted移植到D語言上

twisted雖然是用python所寫,但借助於zope的inte ce模擬,很大程度上改善了動態語言開發的無介面約束的缺點。由於它有一整套規範化的介面,所以應該先把它的介面轉化過來,方便編寫測試。簡單看了一下twistedcore,這個是twisted最基本的部分,先把twisted.intern...