zoukankan      html  css  js  c++  java
  • 移植opencv2.4.2到tiny6410

    OpenCV是目前开源项目中最著名的基于机器视觉方向的图像处理的开发包,目前已经有被移植到嵌入式Linux环境上。本文介绍了OpenCV交叉编译的基本步骤。

    一、编译环境及库文件

    linux环境:fedora14
    交叉编译:4.5.1
    arm板子:tiny6410

    libz:        zlib-1.2.7
    libjpeg:       jpegsrc.v7
    libpng:       libpng-1.5.10
    libyasm:       yasm-1.2.0
    opencv:        opencv-2.4.2
    libx264:       x264-snapshot-20120608-2245
    libxvid:       xvidcore-1.3.2
    lffmpeg:       ffmpeg-0.10.3
    cmake:         cmake-2.8.8-Linux-i386.tar,gz

    二、opencv-2.4.1的移植过程

    1、libz的交叉编译:

    # ./configure --prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi --shared
    修改makefile
    CC=arm-linux-gcc
    AR=arm-linux-ar rc
    RANLIB=arm-linux-ranlib
    CDSHARED=arm-linux-gcc -shared -wl, -soname,libz.so.1,--version-script,zl
    lib.map
    #make
    #make install

    2、libjpeg的交叉编译:

    #./configure --host=arm-linux --prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi --enable-shared --enable-static
    #make install


    3、libpng的交叉编译

    #./configure --host=arm-linux --prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi --enable-shared --enable-static
    #make
    #make install

    4、yasm的交叉编译:

    #./configure --host=arm-linux --prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi --enable-shared --enable-static
    #make
    #make install


    5、libx264的交叉编译:

    #CC=arm-linux-gcc ./configure --enable-shared --host=arm-linux --disable-asm --prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi
    #make
    #make install
    6、libxvid的交叉编译:

    #cd build/generic
    #./configure --prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi --host=arm-linux  --disable-assembly
    #make
    #make install

    7、ffmpeg的交叉编译:

    #./configure --prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi --enable-shared --disable-static --enable-gpl --enable-cross-compile --arch=arm --disable-stripping --target-os=linux --enable-libx264 --enable-libxvid --cc=arm-linux-gcc --enable-swscale
    #make
    #make install

    8.cmake-gui安装
    到官网上下载已经编译好的cmake-2.8.8-Linux-i386.tar,gz,解压就可以了
     
    9、opencv2.4.1的交叉编译:

    用到的主要目录说明:
    交叉编译工具链所在目录     /opt/FriendlyARM/toolschain/4.5.1/
    安装opencv的目录         /usr/local/
    opencv源码所在目录          /home/6410/opencv/opencv-2.4.2/
    编译好的opencv库所在目录      /home/6410/opencv/opencv-2.4.2/build

    #mkdir build
    #cd build
    #cmake-gui
    选择源代码目录/home/6410/opencv/opencv-2.4.2/
    选择Build目录:/home/6410/opencv/opencv-2.4.2/build
    点击Configure,保持generator为Unix Makefiles,选择Specify options for cross-compiling,点击Next,
    Operating System填写arm-linux
    C Compilers填写opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc
    C++ Compilers填写opt/FriendlyARM/toolschain/4.5.1//bin/arm-linux-g++
    程序库的Target Root填写opt/FriendlyARM/toolschain/4.5.1/
    然后点击Finish。
    默认安装目录为/usr/local,点击Generate生成Makefile。

    #make


    错误一:

    Linking CXX executable http://www.cnblogs.com/bin/opencv_createsamples
    http://www.cnblogs.com/lib/libopencv_core.so: undefined reference to `clock_gettime'
    http://www.cnblogs.com/lib/libopencv_highgui.so: undefined reference to `_TIFFerrorHandler'
    http://www.cnblogs.com/lib/libopencv_highgui.so: undefined reference to `_TIFFrealloc'
    http://www.cnblogs.com/lib/libopencv_core.so: undefined reference to `pthread_key_create

    解决方法:
    修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt,重新编译,错误消除

    错误二:
    Linking CXX executable http://www.cnblogs.com/bin/opencv_createsamples
    http://www.cnblogs.com/lib/libopencv_highgui.so: undefined reference to `_TIFFerrorHandler'
    http://www.cnblogs.com/lib/libopencv_highgui.so: undefined reference to `_TIFFrealloc'
    http://www.cnblogs.com/lib/libopencv_highgui.so: undefined reference to `_TIFFmalloc'
    http://www.cnblogs.com/lib/libopencv_highgui.so: undefined reference to `_TIFFmemcpy'
    http://www.cnblogs.com/lib/libopencv_highgui.so: undefined reference to `TIFFOpen'
    http://www.cnblogs.com/lib/libopencv_highgui.so: undefined reference to `_TIFFfree'
    http://www.cnblogs.com/lib/libopencv_highgui.so: undefined reference to `_TIFFwarningHandler'
    http://www.cnblogs.com/lib/libopencv_highgui.so: undefined reference to `_TIFFmemcmp'
    http://www.cnblogs.com/lib/libopencv_highgui.so: undefined reference to `_TIFFmemset'
        解决方法:修改CMakeCache.txt,WITH_TIFF:BOOL=ON,改成OFF,重新编译,错误消除。

    #make install
    三、测试

    测试程序:
    #include <cv.h>  
    #include <cxcore.h>  
    #include <highgui.h>  
          
          
    int main(int argc,char **argv)  
    {  
        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;  
    }  

    编译:
    #arm-linux-g++ -o opencv_test opencv_test.cpp -I /usr/local/include -L /usr/local/lib -lopencv_core -lopencv_highgui -lpthread -lrt
    单个opencv的make就花了大概1个半小时,终于成功了,但是这只是开始,要想运用opecv+qt+x264+ffmpeg做东西,这还需要更长远的学习啊

  • 相关阅读:
    PIE SDK介绍
    PIE软件介绍
    PIE SDK与Python结合说明文档
    转载博客(Django2.0集成xadmin管理后台遇到的错误)
    python+django学习二
    python+django学习一
    HTML练习二--动态加载轮播图片
    HTML练习一
    LeetCode 999. 车的可用捕获量
    LeetCode 892. 三维形体的表面积
  • 原文地址:https://www.cnblogs.com/linengier/p/3009633.html
Copyright © 2011-2022 走看看