`
udj38udj
  • 浏览: 14328 次
社区版块
存档分类
最新评论

Linux + opencv(1.X 和2.0)

 
阅读更多

Linux + opencv(1.X 和2.0)
2010年12月26日
  最近在学习linux下的图形图像处理,貌似学名叫机器视觉。qt里面有个opengl,是绘图的图形处理,之前有点模糊,先贴几个文字,根据内核版本的不同,可以选择opencv1.0 和2.0,2.0以上使用交叉编译4.x.x 1.0使用3.4.1可以。
  1. 下载安装文件
  上http://sourceforge.net/projects/opencvlibrary/下载最新的版本,目前是2.0.0。
  系统版本:ubuntu9.04
  2. 解压源码包 3.查看INSTALL文件说明
         在解压生成的文件夹OpenCV-2.0.0下有个INSTALL文件,阅读一下该文件,检查一下哪些文件你还没有安装好.
  4.检查软件配置
  $./configure
  5. 编译并安装
  $make
  $sudo make install
  6.更新动态链接库
  在/etc/ld.so.conf.d文件末尾添上一行
  /usr/local/lib,用分号与前一个路径隔开
  执行命令:
  $sudo ldconfig
  P.S.不知为什么每次重启后都要重新配置一下,否则要报异常,每次可以如下配置:
  $ echo $LD_LIBRARY_PATH
  $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
  然后运行就没问题了.
  具体过程详见:http://opencv.willowgarage.com/wiki/InstallGuide 1. 安装opencv libraries. sudo apt-get install libcv libcv-dev libcvaux libcvaux-dev libhighgui libhighgui-dev opencv-doc python-opencv 系统:ubuntu10.04
  2.安装完后,输入:
  export LD_LIBRARY_PATH=/home/opencv/lib  3. 检测OpenCV library的目录:
  $ pkg-config  cflags opencv
  (输出:-I/usr/include/opencv)
  $ pkg-config  libs opencv
  (输出:-lcxcore -lcv -lhighgui -lcvaux -lml)
  4. 检测是否所有的Library文件都安装好了:
  $ apt-cache search opencv
  显示如下:
  
  5. 显示图片的示例程序:
  #include "highgui.h"
  int main( int argc, char** argv )
  {
  IplImage* img = cvLoadImage( "lena512.bmp" );
  cvNamedWindow( "E1″, CV_WINDOW_AUTOSIZE );
  cvShowImage( "E1″, img );
  cvWaitKey(0);
  cvReleaseImage( &img );
  cvDestroyWindow( "E1″ );
  }
  把lena512.bmp换成你要显示的图片文件。
  6. 编译 
  g++ -I/usr/include/opencv -o e1 -lcv -lcxcore -lhighgui -lm e1.cpp
  7. 运行
  ./e1
  显示Lena
  是直接贴过来的,图片没有。http://www.linuxidc.com/Linux/2010-06/26695.htm OpenCV的移植
  开源的计算机视觉类库OpenCV( Intel?? Open Source Computer Vision Library)由英特尔公司位于俄罗斯的研究实验室所开发,它是一套可免费获得的由一些C 函数和C ++ 类所组成的库,用来实现一些常用的图像处理及计算机视觉算法]。由于OpenCV 的源代码是完全开放的,而且源代码的编写简洁而又高效,特别是其中大部分的函数都已经过汇编最优化,以使之能高效而充分地利用Intel系列处理芯片的设计体系,OpenCV 的代码执行效率是非常高的,所以近年来在国外的图像处理相关领域中被广泛地使用,成为一种流行的图像处理软件。
  2.1.1 OpenCV 的特点
  相对于其它常用的图像处理软件来说,OpenCV有其显著的不可比拟的优点,主要体现在如下几个方面[1]:
  (1)OpenCV是一个包含了超过300 个C 函数的应用编程接口,它不依赖于外部库,既可以独立运行,也可在运行时使用其它外部库。
  (2)高性能:OpenCV 中所有的算法都是基于封装于IPL 的具有很高灵活性的动态数据结构,而且其中有一半以上的函数在设计及汇编时被Intel 公司针对其所生产的处理器进行了优化。
  (3)开放性:不管对于商业的还是非商业的用途,OpenCV都是完全免费的,其源代码完全开放,开发者可以对源代码进行修改,将自己设计的新类添加到库中,只要设计符合规范,自己的代码也可以被别人广泛使用。
  (4)可移植性:由于OpenCV的大部分库函数基本上采用C或C++语言编写,因此可以方便地移植到其它如ARM、MPIS等嵌入式微处理器中。
  2.1.2 OpenCV 的函数体系
  OpenCV 中每个函数的命名都以"cv"开始,然后是该函数的行为及目标。例如用来创建图像的函数"cvCreateImage",载入图像的函数"cvLoadImage"。OpenCV是为图像处理及计算机视觉在实际工程中的应用而设计的一个类库,其中所有的函数都由于其在实际应用中所实现的不同的功能而分属不同的类型,主要的函数类型有:
  (1)基本的图像处理与分析函数:这个类型的函数主要用于实现一些基本的图像处理与分析功能,例如图像平滑函数cvSmooth,Sobel 算子cvSobel,Canny 边缘分割函数cvCanny 等。
  (2)结构分析函数:包括有轮廓处理函数,几何学函数以及平面细分函数。
  (3)运动分析与目标跟踪函数:包括有用于运动分析与目标跟踪的函数,例如背景重建函数cvAcc,用光流法或动态轮廓模型来实现目标跟踪的函数cvCalcOpticalFlowBM 和cvSnakeImage 以及卡尔曼滤波函数CvKalman等。
  (4)摄像机标定和3D 重建函数:包括有用于摄像机标定,姿态估计以及从两个摄像机进行3D 相似重构的函数。
  (5)GUI 与视频处理函数:包括有高级图形用户接口highGUI 用以实现对图像的载入、显示及保存等基本操作以及用以实现视频输入输出及处理的函数。
  根据上述的函数体系,程序开发者可以根据自己所开发应用程序所要实现的功能来方便地选择所需的库函数,从而大大减少开发时间和精力,缩短程序开发的周期。
  2.1.3 OpenCV移植
  OpenCV提供了基于MS-Windows和基于Linux操作系统的源代码,但这些源码主要都针对PC机平台,对于ARM开发平台,OpenCV并没有作具体的移植介绍,然而如果在嵌入式ARM平台上利用OpenCV进行应用开发,则必须对OpenCV进行交叉编译和移植。
  我们在交叉编译支持嵌入式ARM的OpenCV函数库的过程中发现只有在编译OpenCV的级图形用户接口highGUI目录的内容时出现系统找不到gtk+-2.0和gdk-pixbuf-2.0的pkg-config脚本错误,通过对OpenCV的源码和configure配置文件进行分析,发现OpenCV源码中除了highGUI库中的cvShowImage函数用到了GTK+-2.0中相关内容,该函数主要完成将图像显示在GTK+窗体上,而configure配置文件中因找不到GTK和GDK的包配置文件pkg-config的相关内容便将GTK相关配置选项进行了屏蔽,所以进行交叉编译时无法通过。实际上在嵌入式Qt开发平台中,基本上不用GTK中的相关内容,所以可将configure配置文件中检测GTK和GDK的部分注释掉,然后再进行交叉编译便可生成支持嵌入式ARM微处理器的OpenCV动态库,具体移植和编译步骤:
  (1)、配置文件的修改:
  将configure文件下列内容注释掉,只保留GTK_CFLAGS=""、GTK_LIBS=""、have_gtk=no三项内容(如下黑体所示);
  #  if test "$PKG_CONFIG" = "no" ; then
  #     echo "*** The pkg-config script could not be found. Make sure it is"
  #     echo "*** in your path, or set the PKG_CONFIG environment variable"
  #     echo "*** to the full path to pkg-config."
  #  else
  #     PKG_CONFIG_MIN_VERSION=0.9.0
  #     if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
  #        echo "$as_me:$LINENO: checking for \"gtk+-2.0 gdk-pixbuf-2.0\"" >&5
  echo $ECHO_N "checking for \"gtk+-2.0 gdk-pixbuf-2.0\"... $ECHO_C" >&6
  #        if $PKG_CONFIG --exists ""gtk+-2.0 gdk-pixbuf-2.0"" ; then
  #            echo "$as_me:$LINENO: result: yes" >&5
  #echo "${ECHO_T}yes" >&6
  #            succeeded=yes
  #            echo "$as_me:$LINENO: checking GTK_CFLAGS" >&5
  #echo $ECHO_N "checking GTK_CFLAGS... $ECHO_C" >&6
  #            GTK_CFLAGS=`$PKG_CONFIG --cflags ""gtk+-2.0 gdk-pixbuf-2.0""`
  #            echo "$as_me:$LINENO: result: $GTK_CFLAGS" >&5
  #echo "${ECHO_T}$GTK_CFLAGS" >&6
  #
  #            echo "$as_me:$LINENO: checking GTK_LIBS" >&5
  #echo $ECHO_N "checking GTK_LIBS... $ECHO_C" >&6
  #            GTK_LIBS=`$PKG_CONFIG --libs ""gtk+-2.0 gdk-pixbuf-2.0""`
  #            echo "$as_me:$LINENO: result: $GTK_LIBS" >&5
  #echo "${ECHO_T}$GTK_LIBS" >&6
  #        else
  GTK_CFLAGS=""
  GTK_LIBS=""
  ## If we have a custom action on failure, don't print errors, but
  ## do set a variable so people can do so.
  #            GTK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors ""gtk+-2.0 gdk-pixbuf-2.0""`
  #        fi
  #     else
  #        echo "*** Your version of pkg-config is too old. You need version #$PKG_CONFIG_MIN_VERSION or newer."
  #     fi
  #  fi
  #  if test $succeeded = yes; then
  #     have_gtk=yes
  #cat >>confdefs.h 平台上/usr/qpe/lib目录中,并利用export设置OpenCV工作时所需的环境参数LD_LIBRARY_PATH。
  本文出自 "命苦" 博客,请务必保留此出处http://mkhgg.blog.51cto.com/1741572/363489 linux 下 opencv2.0 的移植 (ARM9)
  环境: 
  PC机系统:Ubuntu10.10 (linux2.6.35-23)
  目标板:天嵌2440 统 (系:Qt4.7,内核:2.6.30) 
  arm-linux-gcc:4.3.3
  解压:OpenCV-2.0.0.tar.bz2 
  #cd  OpenCV-2.0.0 
  #./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/EmbedSky/4.3.3/arm-none-linux-gnue abi/include LDFLAGS=-L/opt/EmbedSky/4.3.3/arm-none-linux-gnuea bi/libc/lib --with-v4l2 --prefix=/opt/arm/opencv --libdir=/opt/arm/opencv/lib -includedir=/opt/arm/opencv/include 
  #make 
  #make install 
  ?  --host=arm-linux
  ?  --without-gtk:
  ?  --without-carbon:
  ?  --without-quicktime
  ?  --without-1394libs
  ?  --without-ffmpeg
  ?  --without-python
  ?  --without-swig
  ?  --enable-static
  ?  --disable-shared:
  ?  CXX=arm-linux-g++
  ?  CPPFLAGS=-I/opt/EmbedSky/4.3.3/arm-none-linux-gnue abi/include:OpenCV会用到一些dev的包,如png.h,jpeglib.h头,大部分文件在/usr/include下。
  ?  LDFLAGS=-L/opt/EmbedSky/4.3.3/arm-none-linux-gnuea bi/libc/lib
  ?  --prefix=/opt/arm/opencv
  ?  --libdir=/opt/arm/opencv/lib
  ?  -includedir=/opt/arm/opencv/include
  四、移植
  将/opt/arm/opencv/lib里的 
  libcvaux.so.4.0.0 
  libcv.so.4.0.0 
  libcxcore.so.4.0.0 
  libhighgui.so.4.0.0 
  libml.so.4.0.0 
  拷出来全部重命名
  *.so.4
  QT *.pro文件中到设置
  x86的设置:
  INCLUDEPATH += /usr/include/opencv/
  LIBS += -L/usr/lib -lcv -lcxcore lhighgui
  arm的设置:
  INCLUDEPATH += /opt/arm/opencv/include/opencv
  LIBS += -L/opt/arm/opencv/lib -lcxcore -lhighgui -lcv
  本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chennxi/archive/2010/12/17/60 82039.aspx
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics