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."
#     echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get 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."
#        echo "*** See http://www.freedesktop.org/software/pkgconfig"
#     fi
#  fi
 
#  if test $succeeded = yes; then
#     have_gtk=yes
 
#cat >>confdefs.h <<\_ACEOF
##define HAVE_GTK
#_ACEOF
 
#  else
     have_gtk=no
#  fi
(2)、交叉编译
[root@opencv-0.9.9]$./configure -–host=arm-linux
[root@opencv-0.9.9]$make
[root@opencv-0.9.9]$make install
       执行make install命令后,OpenCV将编译好的的库文件保存在/usr/local/lib目录下。主要的库文件:libhighgui.so.0.9.9、libhighgui.la、libcxcore.so.0.9.9、libcxcore.la、libcvaux.so.0.9.9、libcvaux.la、libcv.so.0.9.9、libcv.la及相应的符号链接
(3)、环境境参数设置
       将编译好的库文件和相应的符号链接下载到ARM开发平台上/usr/qpe/lib目录中,并利用export设置OpenCV工作时所需的环境参数LD_LIBRARY_PATH。
 
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mkhgg/archive/2010/07/30/5776409.aspx