编译OpenCV for arm-linux

来源:互联网 发布:细说php第三版pdf下载 编辑:程序博客网 时间:2024/05/29 10:07

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 ../../bin/opencv_createsamples
../../lib/libcxcore.so: undefined reference to `clock_gettime'
../../lib/libcxcore.so: undefined reference to `pthread_key_create'
../../lib/libcxcore.so: undefined reference to `pthread_getspecific'
../../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、首先确认一下库是否已编译正确及其安装位置

 

查看头文件:

 

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

 

查看库文件:

[c-sharp] view plaincopy
  1. [root@localhost opencv-arm]# ls /usr/local/arm/lib/opencv/lib  
  2. libcv.a  libcvaux.a  libcvaux.so  libcv.so  libcxcore.a  libcxcore.so  libhighgui.a  libhighgui.so  libml.a  libml.so  

 

2、写个简单的测试程序,打开摄像头并创建一个窗口显示

 

[cpp] view plaincopy
  1. // test.cpp  
  2.   
  3. #include <cv.h>  
  4. #include <cxcore.h>  
  5. #include <highgui.h>  
  6.   
  7.   
  8. int main()  
  9. {  
  10.         CvCapture* capture = NULL;  
  11.         IplImage* frame = NULL;  
  12.   
  13.         if( !(capture = cvCaptureFromCAM(-1)))  
  14.         {  
  15.                 fprintf(stderr, "Can not open camera./n");  
  16.                 return -1;  
  17.         }  
  18.   
  19.         cvNamedWindow("video", 1);  
  20.   
  21.         while(frame = cvQueryFrame( capture ) )  
  22.         {  
  23.                 cvShowImage("video", frame);  
  24.         }  
  25.   
  26.         cvDestroyWindow("video");  
  27.         cvReleaseCapture(&capture);  
  28.         return 0;  
  29. }  

 

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库已经可以正常使用。

转自:http://blog.csdn.net/noodies/article/details/5798434

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 毕业证和学位证丢了怎么办 大学毕业证学位证丢了怎么办 大学毕业证和学位证丢了怎么办 毕业证是士官证号码怎么办 自考本科准考证丢了怎么办 自考档案搞丢了怎么办 自考本科档案在自己手里怎么办? 本科自考准考证丢了怎么办 大学团员证丢了怎么办 大学开学团员证丢了怎么办 研究生开学没有团员证怎么办 研究生开学已经不是团员了怎么办 毕业了要搬宿舍怎么办 中专学历认证已停止怎么办 中专不做学历认证考试怎么办 大学生欠学费被扣毕业证怎么办 考警校体检没过怎么办 美国签证申请预约名字写错怎么办 当兵不从学校走怎么办 门牙崩了一小块怎么办 遇到很难过的事情怎么办 小孩子上课精力不集中怎么办 每天工作都很累压力大怎么办 重体力活搬不动怎么办 大学没参加体测怎么办 英文写的很丑怎么办 患有勃起障碍应该怎么办较好 运动过度小腿肌肉酸痛怎么办 高考有纹身是字怎么办 新生儿测听力没过关怎么办 色弱高考体检时没查出来怎么办 公司福利体检查二对半怎么办 高考体检表复印件丢了怎么办 高考体检表身高填错了怎么办 大学档案高考体检表丢了怎么办 工厂组织体检我有乙肝怎么办 我有乙肝单位组织体检怎么办? 矮腰袜子老掉怎么办 短腰袜子老下滑怎么办 中考体检结果丢了怎么办 咳嗽左胸围一处刺痛怎么办?