編譯OpenCV for arm-linux

來源:互聯網
上載者:User

OpenCV是Intel支援的開源電腦視覺庫。它由一系列C函數和少量C++類構成,實現了影像處理和電腦視覺方面的很多通用演算法。它不依賴於其它的外部庫—儘管也可以使用某些外部庫。

OpenCV使用BSD License,對非商業應用和商業應用都可以免費使用。

OpenCV的主要應用環境是Windows和Linux,對於嵌入式系統如arm-linux,很少有資料提到,因此將我在arm-linux編譯過程記錄下來和大家分享。

預備工作:

a. 安裝交叉編譯鏈
我使用的是arm-linux-gcc
4.3.2,解壓到目錄/usr/local/arm/4.3.2,然後在環境變數PATH中增加/usr/local/arm/4.3.2/bin

b. 安裝CMake
OpenCV
2.0之後的版本,必須使用CMake建立Makefile。我使用的CMake版本是2.8.2,解壓到目錄/usr/local/cmake-2.8.2-Linux-i386,然後在環境變數PATH中增加/usr/local/cmake-2.8.2-Linux-i386/bin

編譯OpenCV:

1、解壓OpenCV 2.1到/usr/local/OpenCV-2.1.0目錄下

2、建立/usr/local/opencv-arm/目錄,作為CMake編譯arm版本的工作目錄

3、在X環境下,運行cmake-gui
選擇原始碼目錄:/usr/local/OpenCV-2.1.0

選擇Build目錄:/usr/local/opencv-arm/
點擊Configure,保持generator為Unix
Makefiles,選擇Specify options for cross-compiling,點擊Next
Operating
System填寫arm-inux
C Compilers填寫/usr/local/arm/4.3.2/bin/arm-linux-gcc

C++ Compilers填寫/usr/local/arm/4.3.2/bin/arm-linux-g++
程式庫的Target
Root填寫/usr/local/arm/4.3.2/,然後點擊Finish

修改預設配置,預設安裝目錄為/usr/local,對於交叉編譯的庫來說並不合適,所以我把CMAKE_INSTALL_PREFIX變數改為/usr/local/arm/lib/opencv/

另外,我沒有安裝tiff映像的支援,因此去掉WITH_TIFF

點擊Generate產生Makefile

4、在終端介面中,進入目錄/usr/local/opencv-arm,運行make編譯opencv

編譯時間發現如下錯誤:
Linking CXX executable
http://www.cnblogs.com/bin/opencv_createsamples
http://www.cnblogs.com/lib/libcxcore.so: undefined reference to
`clock_gettime'
http://www.cnblogs.com/lib/libcxcore.so: undefined reference to
`pthread_key_create'
http://www.cnblogs.com/lib/libcxcore.so: undefined reference to
`pthread_getspecific'
http://www.cnblogs.com/lib/libcxcore.so: undefined reference to
`pthread_setspecific'

原因是cmake不認識我定義的arm-linux系統標記,沒有加上庫pthread和rt的連結選項

5、修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原來為空白,加上-lpthread -lrt,重新編譯,錯誤消除

6、運行make install,將opencv產生的庫和標頭檔安裝到目錄/usr/local/arm/lib/opencv/

測試OpenCV庫

1、首先確認一下庫是否已編譯正確及其安裝位置

查看標頭檔:

[root@localhost opencv-arm]# ls /usr/local/arm/lib/opencv/include/opencv/

cvaux.h cvcompat.h cv.hpp cvtypes.h cvvidsurv.hpp cxcore.h
cxerror.h cxmat.hpp cxoperations.hpp highgui.h ml.h
cvaux.hpp
cv.h cvinternal.h cvver.h cvwimage.h cxcore.hpp cxflann.h
cxmisc.h cxtypes.h highgui.hpp
[root@localhost opencv-arm]# ls
/usr/local/arm/lib/opencv/include/opencv/
cvaux.h cvcompat.h
cv.hpp cvtypes.h cvvidsurv.hpp cxcore.h cxerror.h cxmat.hpp
cxoperations.hpp highgui.h ml.h
cvaux.hpp cv.h cvinternal.h
cvver.h cvwimage.h cxcore.hpp cxflann.h cxmisc.h cxtypes.h
highgui.hpp

查看庫檔案:

[root@localhost opencv-arm]# ls /usr/local/arm/lib/opencv/lib
libcv.a
libcvaux.a libcvaux.so libcv.so libcxcore.a libcxcore.so libhighgui.a
libhighgui.so libml.a libml.so
[root@localhost opencv-arm]# ls
/usr/local/arm/lib/opencv/lib
libcv.a libcvaux.a libcvaux.so libcv.so
libcxcore.a libcxcore.so libhighgui.a libhighgui.so libml.a libml.so

2、寫個簡單的測試程式,開啟網路攝影機並建立一個視窗顯示

// test.cpp

#include <cv.h>
#include
<cxcore.h>
#include <highgui.h>

int main()

{
CvCapture* capture = NULL;
IplImage* frame =
NULL;

if( !(capture = cvCaptureFromCAM(-1)))

{
fprintf(stderr, "Can not open camera.\n");

return -1;
}

cvNamedWindow("video", 1);

while(frame = cvQueryFrame(
capture ) )
{
cvShowImage("video", frame);

}

cvDestroyWindow("video");

cvReleaseCapture(&capture);
return 0;
}
//
test.cpp

#include <cv.h>
#include <cxcore.h>
#include
<highgui.h>

int main()
{
CvCapture* capture = NULL;

IplImage* frame = NULL;

if( !(capture = cvCaptureFromCAM(-1)))

{
fprintf(stderr, "Can not open
camera.\n");
return -1;
}

cvNamedWindow("video", 1);

while(frame = cvQueryFrame( capture ) )

{
cvShowImage("video", frame);
}

cvDestroyWindow("video");

cvReleaseCapture(&capture);
return 0;
}

3、編譯連結測試程式

arm-linux-g++ -I/usr/local/arm/lib/opencv/include/opencv/
-L/usr/local/arm/lib/opencv/lib/ -lcv -lcxcore -lhighgui -lpthread -lrt -o test
test.cpp

4、複製程式到嵌入式系統中運行

首先複製主機/usr/local/arm/lib/opencv/lib/下面的幾個.so檔案到嵌入式Linux系統的/lib/目錄下,再複製我們編譯的test到嵌入式系統/opt/myworks/目錄下(並確保檔案test屬性為可執行),如果test可正常運行沒有報告缺少庫檔案,說明我們編譯的arm-linux版OpenCV庫已經可以正常使用。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.