Chinaunix首页 | 论坛 | 博客
  • 博客访问: 702313
  • 博文数量: 152
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1793
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-12 12:26
个人简介

相信自己,只有不想做的,没有做不到的。

文章分类

全部博文(152)

文章存档

2021年(1)

2015年(2)

2014年(74)

2013年(75)

分类: LINUX

2013-09-27 10:36:55

移植opencv2.4.2到全志A10的实例

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

一、编译环境及库文件

linux环境:ubuntu12.0
交叉编译:4.3.2
arm板子:全志A10

libz:        zlib-1.2.3
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.2的移植过程

1、libz的交叉编译:

# ./configure --prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi --shared
修改makefile

    CC=arm-linux-gcc

    LDSHARED=arm-linux-gcc -shared -Wl,-soname,libz.so.1

    CPP=arm-linux-gcc -E

     AR=arm-linux-ar rc

     RANLIB=arm-linux-ranlib


#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
(如果报错libx264 not fount 就--enable-libx264 --enable-libxvid 给去掉继续make)
#make
#make install

8.cmake-gui安装
到官网上下载已经编译好的cmake-2.8.8-Linux-i386.tar.gz,解压就可以了
若出现cmake-gui:libSM.so:connot open shared objectf file!
     安装 sudo apt-get install ia32-libs
会生成一个图像界面 所以source CRT输入会报错 not connect x server;  要在ubuntu下运行cmake-gui 因为CTR不支持图像界面
 
9、opencv2.4.2的交叉编译:

用到的主要目录说明:
交叉编译工具链所在目录     /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 ../../bin/opencv_createsamples
../../lib/libopencv_core.so: undefined reference to `clock_gettime'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFerrorHandler'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFrealloc'
../../lib/libopencv_core.so: undefined reference to `pthread_key_create

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

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

#make install
三、测试

测试程序:
#include  
#include  
#include  
      
      
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做东西,这还需要更长远的学习啊
阅读(2961) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~