基於qt的arm與x86兩種平台的opencv開發,最近折騰一些超級麻煩的東西,先是ros後是opencv的qt、ubuntu、樹莓派、win各種亂七八糟的東西,簡直是「剪不斷,理還亂」。好了,廢話不多說,直接上方案。
關於安裝qt、opencv什麼的我就不詳細說了,這裡提點一下。關於qt版本的問題,最好還是上qt5吧,雖然沒qt4那麼承受,但據說支援新的opencv3比較好。不過事實上這玩意可以同時裝qt4、qt5兩個編譯鏈,不喜歡隨時可以換,不成問題。至於opencv這裡也要說一下,我x86平台上虛擬機器ubuntu16.04是原始碼方式安裝,樹莓派上是apt方式安裝.
sudo apt-get install libcv-dev直接又方便。
但這裡就有乙個問題,我找遍全網,結果都說.so的庫檔案是安裝在usr/lib/下面,結果找了老半天找不到。後來直接查詢,才發現根本不再這個目錄!
/usr/lib/arm-linux-gnueabihf/目錄下面才存放庫檔案,而且跟庫檔案編譯安裝在x86平台上不同,很多標頭檔案、庫的名稱、形式都有改變!
(一)處理:
我們需要在qt上建立乙個控制台應用程式:qt console application
.pro檔案末尾加兩行:includepath += /usr/local/include \
/usr/local/include/opencv \
/usr/local/include/opencv2
libs += /usr/local/lib/libopencv_highgui.so \
/usr/local/lib/libopencv_core.so \
/usr/local/lib/libopencv_imgproc.so \
/usr/local/lib/libopencv_imgcodecs.so
這樣寫比較全面,實際上並不需要這麼多庫,簡單的兩個就可以了。includepath += /usr/local/include \
/usr/local/include/opencv2
libs += /usr/local/lib/libopencv_highgui.so \
/usr/local/lib/libopencv_core.so
這裡體現了兩件事:
opencv的標頭檔案在我x86+ubuntu 16.04平台上安裝在/usr/local/include裡面,而.so的庫檔案則在/usr/local/lib/裡面。
(二)**採集:
main.cpp:
#include
#include //包含opencv庫標頭檔案
#include
#include
int main( int argc, char** ar** )
cvreleasecapture( &capture );//釋放記憶體;
cvdestroywindow( "example2" );//銷毀視窗
}.pro檔案:includepath += /usr/local/include \
/usr/local/include/opencv2
libs += /usr/local/lib/libopencv_highgui.so \
/usr/local/lib/libopencv_core.so \
/usr/local/lib/libopencv_videoio.so
影象處理是一樣的就不必再討論,這裡說一下攝像頭影象採集:
main.cpp的標頭檔案略有變化,可能是由於apt形式安裝的原始碼標頭檔案並不相同:
#include
#include //包含opencv庫標頭檔案
#include
#include
int main(int argc, char** ar**)
cvreleasecapture(&capture);//釋放記憶體;
cvdestroywindow("example2");//銷毀視窗
}.pro檔案則大有講究:includepath += /usr/include \
/usr/include/opencv \
/usr/include/opencv2
libs += /usr/lib/arm-linux-gnueabihf/libopencv_highgui.so \
/usr/lib/arm-linux-gnueabihf/libopencv_core.so \
/usr/lib/arm-linux-gnueabihf/libopencv_video.so
可以看出,arm平台上的libopencv_video.so取代了x86平台上的libopencv_videoio.so!
ARM與x86優劣比較
指令的強弱是cpu的重要指標,指令集是提高微處理器效率的最有效工具之一。從現階段的主流體系結構講,指令集可分為複雜指令集 cisc 和精簡指令集 risc 兩部分。相應的,微處理隨著微指令的複雜度也可分為 cisc 及 risc 這兩類。cisc是一種為了便於程式設計和提高儲存器訪問效率的晶元設計體...
X86與ARM區別的學習
1.x86主要用於pc領域如筆記bai本 台式電腦 小型服du務器 arm主要用於移動領域如手機 平板。2.x86的功耗dao比較高比如我們常用的台式電腦的cpu的tdp可達65w甚至更高 arm的功耗很低只有個位數。4.x86是英特爾intel首先開發製造的一種微處理器體系結構的泛稱,包括inte...
ARM和x86的區別
cpu的指令集從主流的體系結構上分為精簡指令集 risc 和複雜指令集 cisc 嵌入式系統中的主流處理器 arm處理器,所使用的就是精簡指令集。而桌面領域的處理器大部分使用的是複雜指令集,比如intel的x86系列處理器。我們把arm處理器所使用的指令集稱為arm指令集,把x86處理器所使用的指令...