一個、開發環境
操作系統:fedora14
Opencv版本號:2.0
Qt版本號:4.7
arm:mini6410
交叉編譯工具:arm-linux-gcc-4.5.1
二、安裝與配置
Linux系統的安裝,交叉Qt-creator的安裝還有交叉編譯工具的安裝,網上說的基本都沒什么問題,測試后都能夠用。
這里安裝Qt-Creator遇到了一點小問題,依照網上的和mini6410開發手冊上的安裝方法太復雜了。用QtSdk-offline-linux-x86-v1.2.1.run安裝方便又准確。
這篇文章重點還是將怎樣安裝Opencv到linux下,而且配置Opencv到QT中。並實如今x86和arm平台上可以順利執行qt+Opencv的GUI程序。為將來做嵌入式模式識別搭建一個高速方便的平台。
這里的安裝我是參考的Opencv中文網(這站點發現非常靠譜)
http://wiki.opencv.org.cn/index.php/%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91
Opencv2.0下載地址:
1、解壓文件:
#tar zxvf opencv-2.0.0.tar.gz
#cd opencv-2.0.0
2、檢查軟件配置
#./configure --host=arm-linux --without-gtk --without-carbon --without-quicktime --without-1394libs --without-ffmpeg --without-python --without-swig --enable-static --enable-shared --disable-apps CXX=g++ CPPFLAGS=-I/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/include LDFLAGS=-L/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib --with-v4l2 --prefix=/opt/x86/opencv --libdir=/opt/x86/opencv/lib -includedir=/opt/x86/opencv/include
假設提示有須要的軟件未安裝,請安裝后再執行 ./configure 命令。直到提示"Now run make ..."為止。
備注:opencv2.2中已經省去了configure 文件。能夠通過cmake安裝,參考http://www.samontab.com/web/2010/04/installing-opencv-2-1-in-ubuntu/
3、編譯Opencv
#make
4、安裝Opencv
#make install
5、更新動態鏈接庫
用root用戶運行以下的操作
加入路徑/usr/local/lib到文件/etc/ld.so.conf。然后執行命令
#ldconfig
6、測試安裝包(在sample/c下)
g++ `pkg-config opencv --libs --cflags opencv` drawing.c -o drawing
這里會出現找不到路徑的問題,詳細錯誤例如以下:
Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found
Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found
網上有非常多解決的方法,歸結究竟就是路徑設置問題。
這里我在/root/.bashrc文件里加入例如以下路徑就能夠編譯了
export PKG_CONFIG_PATH=/opt/x86/opencv/lib/pkgconfig:$PKG_CONFIG_PATH
在此編譯測試用例,成功后運行命令:
#./drawing
還能夠測試其它用比如:
cd samples/c
chmod +x build_all.sh
./build_all.sh
./facedetect --cascade="/usr/local/share/opencv/haarcascades/haarcascade_frontalface_alt.xml" --scale=1.5 lena.jpg
以上是x86版opencv的配置安裝
以下是arm版opencv的配置安裝
export PKG_CONFIG_PATH=/opt/arm/opencv/lib/pkgconfig:$PKG_CONFIG_PATH
第一步,configure的配置
./configure --host=arm-linux --without-gtk --without-carbon --without-quicktime --without-1394libs --without-ffmpeg --without-python --without-swig --enable-static --enable-shared --disable-apps CXX=arm-linux-g++ CPPFLAGS=-I/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/include LDFLAGS=-L/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib --with-v4l2 --prefix=/opt/arm/opencv --libdir=/opt/arm/opencv/lib -includedir=/opt/arm/opencv/include
第二步,編譯
Make
出現了例如以下錯誤:
../3rdparty/.libs/lib_clapack.a(dlasyf.o): could not read symbols: File in wrong format
解決方法:刪除3rdparty/.libs/lib_clapack.a這個文件,make clean 后重新啟動make編譯。
第三步,安裝
Make install
成功安裝后。在/opt/arm/opencv/lib和/opt/arm/opencv/include文件夾下會生成非常多文件。
第四步,測試
arm-linux-gcc test.c -o test-arm -I/opt/arm/opencv/include/opencv -L/opt/arm/opencv/lib -lml -lcvaux -lhighgui -lcv -lcxcore -lpthread -lrt
移植opencv2.0到arm上執行./show-arm lena.jpg時的錯誤:
OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian,
install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in
cvNamedWindow, file highgui/window.cpp, line 100
這里說明已經可調用opencv庫進行算法運算了。僅僅是沒有一個gui的平台供使用。以下我嘗試用QT作為這個平台來獲取視頻。
這篇文章的博主:http://blog.csdn.net/noodies/article/details/5798434
在為網友解答的時候說用的是v412做的視頻捕捉,然后再用opencv進行圖像處理。最后操作framebuffer顯示處理結果(我這里沒有嘗試了。感覺qt應該更方便一些)
這篇文章說是gtk要先於opencv安裝:http://lovelittlebean.blog.163.com/blog/static/11658218620125911268437/
我用的fedora14,沒有安裝過gtk,可是執行
#pkg-config --modversion gtk+-2.0
能夠找到我gtk版本號。
#pkg-config --cflags --libs gtk+-2.0
能夠查看gtk編譯和鏈接的信息
這里參考的“源代碼安裝gtk”博客:http://os.it168.com/a2008/0828/984/000000984646.shtml
搞了這么多都沒搞清楚gtk究竟是干嘛用的,在以下博文中有提到過
http://blog.csdn.net/yanzi1225627/article/details/7524698
出現gtk等那就對了的字樣。但還不知道什么意思,怎樣解決接着就寫到qt的配置去了。於是我就先配置qt,這里的qt配置我參照的博文是:
http://blog.chinaunix.net/uid-24641004-id-3459705.html
后來我知道gtk事實上就是一種gui
執行opencv打開攝像頭,不知道是這個博主的qt版本號不一樣還是寫漏了。在執行時提示Qdebug運用錯誤,找到代碼F1進入函數文檔,發現缺少它的頭文件include <QtDebug>,加上就OK了。
還提示.pro不能找到lib**.so的庫,進去查看發現配置的時候多了一個空白行,意思就是libs+=的lib庫加入多行一定要加“\”。我多了一個空白行。
在執行就出現“error!
”
查看代碼中這是Qdebug的錯誤提醒,我直接改動成“error:can not open camero!”。
這樣就一目了然了。
解決的方法當然就是插入攝像頭了。
在編譯執行,頭像出現了
以下就看怎樣移植到arm上了。
改動.pro為arm版的頭文件和庫文件編譯自己的小程序,這個之前編譯生成的,我分別用x86和arm區分開來的。
又一次編譯,然后復制到開發板上執行。
頭疼的事情出現了。出現segmentation fault段錯誤。麻煩了,解決方法博文
http://www.cnblogs.com/s_agapo/archive/2011/11/24/2262346.html
中有提到一點,可是不適合我的程序。他僅僅是先是一張圖片將qt自帶的load函數換成opencv的loadImage。
最后在博文:
http://blog.csdn.net/yanzi1225627/article/details/8215695
提到的評論中,一個女娃告訴他將capture = cvCreateCameraCapture(-1)中的-1設置成202就ok了,試了下真能夠,盡然成功了。到眼下也還不知道202代表啥意思。
執行結果例如以下:
到眼下為止。發現基本已經調通了這整個平台的環境搭建。
以下嘗試運用了一下他的算法,做了個人臉檢測。
也遇到了一些問題如:
編譯x86版本號的qt程序。執行無問題。可是在編譯arm版本號的qt程序時。出現錯誤error: main.o: Relocations in generic ELF (EM: 3)
解決的方法:進入project文件夾運行make clean,清理一下在編譯就ok了。
還出現cvWaitkey(0)的錯誤,我猜的可能是這個函數在arm平台下確實有點問題吧,我就凝視了,由於僅僅是個等待函數。最后執行成功了,可是視頻變得有點卡。不像在x86下執行那么順暢,難道是我凝視了cvWaitkey的原因,還要繼續優化。
貼上結果圖片:
這里提出自己的問題,希望有緣人假設攻克了可以告知我。開始我是安裝的Opencv2.4.2版本號,安裝完畢后,編寫簡單的Opencv程序進行交叉編譯,但總是編譯不通過(這里的安裝參考的文庫:http://wenku.baidu.com/link?url=Wj9y2srglzlvSkGN2m6Yyg89VU9yM16akMcx18lXO8ii8YA6klOaxfeq1zsaY4QNilqJZogvb6YTA6iJ0NiDP6yYnGe9ICQPQS_ThXNCNlm)
移植opencv2.4.2編譯arm程序時
arm-linux-g++ -o opencv_test opencv_test.cpp -I /usr/local/arm/opencv/include/opencv -L /usr/local/arm/opencv/lib -lopencv_core -lopencv_highgui
出現例如以下錯誤:
/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: warning: ../../lib/libcxcore.so, needed by /usr/local/arm/opencv-2.1/lib/libcv.so, not found (try using -rpath or -rpath-link)
/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: warning: ../../lib/libcv.so, needed by /usr/local/arm/opencv-2.1/lib/libcvaux.so, not found (try using -rpath or -rpath-link)
/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: warning: ../../lib/libhighgui.so, needed by /usr/local/arm/opencv-2.1/lib/libcvaux.so, not found (try using -rpath or -rpath-link)
/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: warning: ../../lib/libml.so, needed by /usr/local/arm/opencv-2.1/lib/libcvaux.so, not found (try using -rpath or -rpath-link)
讀了這邊作者的博文:http://blog.csdn.net/yanzi1225627/article/details/7524698。發現他遇到的和我類似的問題,且嘗試了多種方式也沒能解決,終於我也和他一樣走向了放棄Opencv2.4.2的道路。轉向Opencv2.0。當中也嘗試了他提供的解決方法,並參考博文:http://blog.sina.com.cn/s/blog_602f87700100nyda.html
在交叉編譯中LFLAGS即-L換成-Wl,-rpath-link -Wl,發現這個問題是不見了。可是盡然出現了找不到.so的庫文件,我也無語了,這在之前已經解決的問題又回來了,拷貝了庫也設置了路徑,老問題又出現了,被打回十年前的感覺非常痛苦。
arm-none-linux-gnueabi缺少這種庫,拷貝過去即可了。發現不行,且這篇文庫尼瑪是復制的之前好幾個博主的文章,原文不動。都不知道有沒有試過。
沒辦法僅僅能放棄Opencv2.4.2了。
版權聲明:本文博客原創文章,博客,未經同意,不得轉載。