opencv(arm移植總結)

2021-07-02 06:29:21 字數 2852 閱讀 2521

之前寫了乙個自己當時的操作流程,

偶然看到乙個當時自己移植opencv的總結,

當時用了乙個月才弄明白怎麼回事,

這裡放到這裡,

一是保留,也希望其他人能在這裡節省時間。

嵌入式arm系統中安裝

這裡使用的是opencv1.0.0版。

首先說明這裡之所以取1.0版本,

是因為當時我的編譯器是3.4.1,

我試過編譯2.0的但是不行。

後來分析了一下它的部分**,

發現裡邊有巨集定義要求4.0以上的才行。

所以以後也就都用1.0了。

下邊是操作步驟:

首先解壓檔案:tar -jxvf opencv-1.0.0

之後:opencv庫編譯

--host=arm-linux :指出交叉編譯arm平台 

--without-gtk:忽略gtk+2.0 windows 

--without-carbon: 不使用mac os上的x庫 

--without-quicktime 

--without-1394libs

--without-ffmpeg

--without-python

--without-swig

--enable-static :生成靜態庫

--disable-shared:不生成動態庫

--prefix=/usr/local/opencv :指定檔案安裝路徑

--exec-perfix=/usr/local/opencv :當前未知

cxxflags=-o2 :對編譯進行優化//在編譯時,盡量用-o2進行優化,否則容易出問題,

如果沒有用,則自己對makefile檔案,進行修改,將其優化選項改為-o2。

切記生成makefile後,修改裡邊的otherlibs,將含有他的子目錄將其刪掉。

(這裡使用o2優化我也說不好,因為檔案中預設的優化等級是o3,

開始沒有編譯成功,

後來我換成o2就成功了,

應該是裡邊有什麼地方,

沒有注意到。

)make 

make install

export pkg_config_path=$pkg_config_path:/usr/local/lib/pkgconfig

之後:根據需要在/usr/local/lib/pkgconfig/opencv.pc的libs項中加入引數-lpthread、-ldl之類,

例如 libs: -l$ -lcv -lcxcore -lcvaux -lml -lpthread -ldl

(-lcv -cvaux -lml -lpthread -dl -highgui -lm)//如果遇到問題,可以先新增這幾個鏈結庫試試,

看是否好用。

如果在編譯時仍出問題,則將-lpthread -ldl直接寫在makefile檔案裡,進行連線。

同時在這裡可能沒有包含math庫,所以要自己,-lm進行連線math庫

這裡應該編譯成功,

執行時可能還會出錯,如果提示出現缺少libstdc++庫的情況,可以在arm編譯器目錄下的lib目錄中查詢,拷貝到開發板中的/lib中,保程式可以找到即可。

這樣以後,應該可以執行,如果有錯,再到網上查詢原因吧。

總結一點:

這裡有這麼多錯誤,

不過有很多是自己,

沒有好好看出錯原因而導致的無從下手更改。

還有就是,不知道錯誤原因是什麼,

雖然看到了,報錯,

卻總是不知道,錯在**,應該如何糾正。

說明自己在程式方面,還有很大的缺陷。

在出錯時,第乙個想到的不是去網上查詢,如何解決,

而是自己逐行分析,錯誤的提示,

查詢錯誤存在的位置,並分析。

這時,如果仍沒有頭緒,再上網將自己的錯誤報告貼出來,

讓大家一起分析。

這樣才知道,自己錯在**,為什麼錯,該怎樣分析這個錯誤,

錯誤的原因是什麼,怎樣改正這個錯誤。

這是在這次移植opencv1.0.0時,收穫最大的。

///run "gcc -dm -e - < /dev/null" to see a list of gcc defined symbols

檢視gcc的所有預設巨集定義

在移植完成後有些方還是要修改。

主要是canny演算法中有乙個地方在1.0中是不適合,arm中用的。

主要現象是,

在呼叫設計canny的演算法時,

影象處理後是全黑的情況。

原因是在使用cvround函式時,

返回的數值,

在pc和arm上是正好相反的。

解決方法如下:

找到vccanny中的cvround函式

typedef union cv64suf 

cv64suf; 

int cvround( double value ) 

將紅色字型部分改為return int(value + 0.5);

這樣就可以解決影象全黑的情況,

下來就可以使用opencv做自己的專案了。

所以如果是要移植2.0,或2.1以上建議使用4.0以上的編譯器。

還有在2.0.0和2.1中已經解決了上邊影象處理後全黑的**,

所以在2.0和2.1中即使移植到arm中也是不會出現,

處理影象後,影象全黑。

這個不足的是用的arm中如果沒有浮點運算單元,

程式執行起來,

會顯得有些慢,

我當時一幅影象分析完,基本得要30s,

如果有浮點運算單元,

估計速度會好好多

如果用arm做的話,建議使用單浮點運算的。

在opencv的官方**裡有好多問題的解決,

上邊的很多問題,就是在那裡解決的,

可以多去看看。

tslib移植總結

一編譯 用的是ts1.0的版本 export cc arm linux gcc export path usr local arm 2.95.3 bin path autogen.sh 為防止出現undefined reference to rpl malloc 錯誤,採取以下措施 echo ac ...

Linux Charger IC 驅動移植總結

2 電源管理 電池充電過程 總結參考文獻 通過這次移植ti的charger ic晶元到平台上,總結了以下一些內容,需要用到並且掌握的內容。在此之前我還沒有嘗試寫過核心4.0以上的驅動,對於裝置樹的配置只不過是看過語法,也並未太深入的了解。在這裡對所需要涉及到的知識點簡單做一下梳理和總結。linux中...

u boot2020 04移植(總結)

我所理解的u boot移植可以分為以下幾個部分 1 核心級的配置與初始化 這個主要就是在start.s檔案裡面那些彙編 這部分呢我覺得基本上沒有改的必要,除非你很熟悉核心相關的東西。2 soc級別的配置與初始化 這部分的內容是比較多的,而且可以說貫穿整個u boot,但基本上必要的都集中在lowle...