天天看點

zedboard開發闆上移植opencv代碼(立體比對)

前言

   公司要做立體比對相關的項目,已有matlab和c++版本,可是不能做到實時顯示立體資訊,想要硬體實作實時,無奈本渣也是個硬體的新手,先按照實驗室lyq同學的思路在zedboard開發闆的純ARM核裡跑代碼,嵌入式的實作過程是:硬體平台是zedboard開發闆,運作的是裡面的ARM-A9硬核,在裡面運作的是ramdisk系統它是基于Linux的,軟體使用的就是在Linux上,移植opencv到zedboard上面,在虛拟機linux系統下編譯代碼,再zedboard上面運作就行了。其中,ramdisk是ARM-A9硬核的運作系統。在編譯的過程中,需要先配置opencv環境,而且需要将opencv的配置環境的鏡像檔案移植到zedboard開發闆(挂載opencv庫)。

移植過程:

1.搭建VMware虛拟機系統,配置交叉編譯環境,配置opencv庫,制作opencv配置環境的鏡像檔案,鏡像檔案中是移植好的opencv庫;

2.需要将整個算法過程進行編譯(不一定要使用QT,也可以直接使用cmake),生成.o檔案,注意:這個過程中由于LYQ移植庫的時候沒搞好,不能是彩色圖,隻能是單色bmp圖像格式(畫圖工具另存為單色bmp圖像);

   将算法整個過程需要用到的檔案copy到sd卡或者U盤,包括opencv庫的鏡像檔案、輸入圖像、編譯生成的.o檔案;

3.下載下傳序列槽調試工具

    下載下傳了很多序列槽調試工具,最後隻有SecurtCRT管用,需要生成注冊碼,參考網

     非常好用,之前已經下載下傳的有這個軟體,試用期過後必須使用注冊碼,在網上試了好多方法都不行,把這個下載下傳下來按照注冊機檔案夾的readme的步驟來做,一下子就好了;注意:patch之後生成注冊資訊,然後打開pc端SecureCRT 這個軟體,按步驟很快就ok啦~~

4.在嵌入式闆子上運作程式

 首先将sd卡或者u盤挂載到開發闆的系統上,建立/usr/local/lib,将庫檔案加載到/usr/local/lib檔案夾下,運作.o檔案,最後得到結果(得到的是代碼運作的時間)。

整個過程中遇到的問題:

1.打開SecureCTR,選擇正确的com口,序列槽參數設為波特率115200、資料位8、停止位1、校驗無。

2.1)開發闆的SD卡啟動的引腳設定(Zedboard的連接配接和短路塊設定)

zedboard開發闆上移植opencv代碼(立體比對)

2)SD卡的讀寫模式:lock表示sd卡被寫保護;在代碼的運作過程中,出現記憶體區域為隻讀模式,不能在sd卡上運作代碼;sd卡的名稱;

zedboard開發闆上移植opencv代碼(立體比對)

原因:sd卡是隻讀模式,運作代碼的區域是沖突區域;之後改用u盤進行檔案挂載;

3.代碼使用的圖像和.o檔案在同一個檔案夾下

4.mount時候出現device or resource busy的問題

     原因:裝置号沖突

    ​​http://blog.chinaunix.net/uid-24807808-id-3233075.html​​

    通過指令行 cat /proc/devices可以檢視目前系統已經配置設定的裝置号;

5.編譯sm.o時發生錯誤,說是沒有libopencv_core.so.2.4這個檔案,可是通過ls指令可以檢視到該檔案,為什麼?

zedboard開發闆上移植opencv代碼(立體比對)

解決方法:

原因一般有兩個, 一個是​​作業系統​​裡确實沒有包含該共享庫(lib*.so.*檔案)或者共享庫版本不對, 遇到這種情況那就去網上下載下傳并安裝上即可;

另外一個原因就是已經安裝了該共享庫, 但執行需要調用該共享庫的程式的時候, 程式按照​​預設共享​​庫路徑找不到該共享庫檔案.

一般沒有權限的時候使用 可以export一個全局變量 

​LD_LIBRARY_PATH​

​export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH​

順便說一句,如果目前的庫是高版本的,xxx.so.5 但是程式報錯是xxx.so.4 找不到,可以做一個軟連結,因為一般都是可以向下相容的

​ln -s /usr/local/lib/xxx.so.5 /usr/local/lib/xxx.so.4​

6.運作程式時候說輸入圖像錯誤:input image error

   由于opencv庫配置的問題,輸入圖像應該是單色bmp格式;

7.鏡像檔案中沒有libavcodec.so.56這個檔案,運作./sm_png.o時出現這個問題

zedboard開發闆上移植opencv代碼(立體比對)

解決方法:下載下傳該檔案,将該檔案加載到庫檔案夾下;

8.需要在虛拟機中重新編譯生成sm.o檔案,運作的代碼是重新編譯的.o檔案,否則會産生錯誤;

9.linux系統的指令以及對系統的熟悉和學習需要加強;

終于暫時搞定啦~~~~~

zedboard開發闆上移植opencv代碼(立體比對)

疑問:

1.cd /mnt; mount ./opencv_lib.img /usr/local/lib 

 為什麼是将img鏡像檔案挂載到絕對路徑下,而不是直接copy過去?

 參考

1. ​​OpenCV移植到ARM-Linux(Exynos4412)全過程​​;