注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

慵懒的乌龟

——若有,且珍惜~

 
 
 

日志

 
 

在linux下安装opencv  

2011-12-07 16:31:11|  分类: opencv 学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
相信很多做嵌入式的朋友需要将opencv安装到linux或者ARM_linux中,这里分享下我搜集来的成果:


http://sourceforge.net/projects/opencvlibrary 下载OpenCV源码,下载文件

解压文件


检查软件配置

$./configure
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... no

... ...


General configuration ================================================
Compiler: g++
CXXFLAGS: -Wall -fno-rtti -pipe -O3 -g -march=i686 -ffast-math -fomit-frame-pointer

Install path: /usr/local

HighGUI configuration ================================================

Windowing system --------------
Use Carbon / Mac OS X: no
Use gtk+ 2.x: yes
Use gthread: yes

Image I/O ---------------------
Use libjpeg: yes
Use zlib: yes
Use libpng: yes
Use libtiff: yes
Use libjasper: yes
Use libIlmImf: no

Video I/O ---------------------
Use QuickTime / Mac OS X: no
Use xine: no
Use ffmpeg: yes
Use dc1394 & raw1394: yes
Use v4l: yes
Use v4l2: yes

Wrappers for other languages =========================================
SWIG
Python no

Additional build settings ============================================
Build demo apps yes

Now run make ...

如果出现上述输出,表明编译OpenCV所需的软件基本已经安装,可以进行下一步。如果提示有需要的软件未安装,请安装后再运行 ./configure 命令,直到提示"Now run make ..."为止。

部分库的说明: libjasper - The JasPer JPEG-2000 runtime library


编译OpenCV

make

用root用户执行

make install

更新动态连接库

用root用户执行下面的操作

添加路径/usr/local/lib到文件/etc/ld.so.conf,然后运行命令

ldconfig

测试安装包

测试是否安装成功,你可以使用以下的命令行编译位于源代码包中的drawing.c例子: (在1.0版本中, 位于目录 sample/c 下)

g++ `pkg-config opencv --libs --cflags opencv` drawing.c -o drawing

成功编译后你应该能够可以执行./drawing看到highgui输出窗口的结果了.


http://www.eefocus.com/yezhij/blog/08-12/162736_52b6c.html如是说。


OpenCV移植到ARM全过程:

Host:VMware + Ubuntu 10.04

Target:Real6410 with Linux 2.6.28.6

Crossing Compiler:arm-none-linux-gnueabi-4.3.2 with EABI

一 交叉编译链的安装

1 解压,即可得到 arm-none-linux-gnueabi 目录

# tar –xjvf arm-none-linux-gnueabi-4.3.2.tar.bz2

2 为了使用方便,

还可以编辑/etc/bash.bashrc 文件添加把编译器路径到环境变量 PATH 中 ,

只要在这个文件中添加下面这 2 个语句即可:

PATH=/root/ arm-none-linux-gnueabi-4.1.0/bin:$PATH

export PATH

3 编辑完毕后使用 source /etc/bash.bashrc 命令执行以下这个文件,让设置生效,之后再输

入:

# arm-none-linux-gnueabi-gcc -v

如果输出下面的信息则表面设置成功:

Using built-in specs.

Target: arm-none-linux-gnueabi

Configured with: /scratch/julian/lite-respin/linux/src/gcc-4.3/configure --build=i686-pclinuxgnu

--host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disablelibmudflap

--disable-libssp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --enablelanguages=

c,c++ --enable-shared --enable-symvers=gnu --enable-__cxa_atexit --withpkgversion='

Sourcery G++ Lite 2008q3-72' --withbugurl=

https://support.codesourcery.com/GNUToolchain/ --disable-nls

--prefix=/opt/codesourcery

--with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-buildsysroot=/

scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/libc --withgmp=/

scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-none-linux-gnueabii686-

pclinux-

gnu/usr --with-mpfr=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-armnonelinux-

gnueabi-i686-pc-linux-gnu/usr --disable-libgomp --enable-poison-system-directories

--withbuild-

time-tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/ bin --withbuildtime-

tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/bin

Thread model: posix

gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)

至此交叉编译链安装完成。

二 交叉编译libjpeg

为了使OpenCV能处理jpeg图像,我们必须事先交叉编译好libjpeg

这里使用的版本是jpegsrc.v6b

1 下载libjpeg源码:ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz

2 解压进入目录

3 配置

#./configure --prefix=/root/libjpeg-arm --exec-prefix=/root/libjpeg-arm --enable-shared

--enable-static

下面分别介绍这几个参数的作用:

--prefix=/root/libjpeg-arm : 执行make install 后,会将与体系无关的文件拷贝到此目录下,具

体如下:

/root/libjpeg-arm.....................................

|

+---include........................................

|

---jconfig.h

|

---jerror.h

|

---jmorecfg.h

|

---jpeglib.h

+---man............................................

|

+---man1.......................................

|

---cjeg.1

|

---djpeg.1

|

---jpegtran.1

|

---rdjpgcom.1

|

---wrjpgcom.1

--exec-prefix=/root/libjpeg-arm : 执行make install 后,会将与体系无关的文件拷贝到此目录

下,即将一些可执行程序、动态链接库和静态链接库拷贝到此目录的相应目录下,具体如下:

/root/libjpeg-arm........................................

|

+---bin............................................

|

---cjeg

|

---djpeg

|

---jpegtran

|

---rdjpgcom

|

---wrjpgcom

+---lib...........................................

|

---libjpeg.la

|

---libjpeg.so

|

---libjpeg.so.62

|

---libjpeg.so.62.0.0

--enable-shared : 用GNU libtool编译成动态链接库 。

4 修改生成的Makefile文件:

# The name of your C compiler:

CC= gcc 该成 CC= /root/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc

(根据你自己交叉编译器的位置修改)

# library (.a) file creation command

AR= ar rc 该成 AR= /root/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-ar rc

(同上)

# second step in .a creation (use "touch" if not needed)

AR2= ranlib 该成 AR2= /root/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabiranlib

(同上)

5 在/root/libjpeg-arm目录下建立 man/man1,include,lib,bin四个目录

6 # make

# make install

7 将/root/libjpeg-arm/include/中(jconfig.h, jerror.h, jmorecfg.h, jpeglib.h)四个头文件拷

贝到:/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/include中。

将/root/libjpeg-arm/lib中(libjpeg.la, libjpeg.so, libjpeg.so.62, libjpeg.so.62.0.0)四个库

文件拷贝到:/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/lib中

注意:执行以下命令检查生成的libjpeg.so是否为ARM版:

# file libjpeg.so

以下为正确输出,否则检查交叉编译器路径以及Makefile并重新编译。

注意:执行完以上操作后执行以下命令检查库文件是否已正确安装:

# arm-linux-gcc -print-file-name=libjpeg.so

如果输出为"libjpeg.so"则说明没有正确安装,重复7步骤。

如果输出为"DIR/libjpeg.so"则说明安装正确。

至此libjpeg交叉编译完成。

三 交叉编译 x264,xvid,ffmpeg

为了使OpenCV能处理视频,我们要事先交叉编译ffmpeg,而ffmpeg又是依赖x264和

xvid的。

1 下载yasm:

到 http://www.tortall.net/projects/yasm/wiki/Download 下载yasm0.7.2(x264需要用

到的汇编编译器)

# ./configure --enable-shared --prefix=/root/arm-none-linux-gnueabi/arm-none-linuxgnueabi/

--host=arm-linux

# make

# make install

2 交叉编译x264

到 ftp://ftp.videolan.org/pub/videolan/x264/snapshots/ 下载x264-snapshot-20060805-

2245.tar.bz2,解压进入目录

(1).配置

# ./configure --prefix=/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/ --enableshared

(2).修改配置参数

修改config.mak:

prefix=/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/

exec_prefix=${prefix}

bindir=${exec_prefix}/bin

libdir=${exec_prefix}/lib

includedir=${prefix}/include

# 这里改为ARM

ARCH=ARM

SYS=LINUX

# 这里改为arm-linux-gcc

CC=arm-linux-gcc

# 这里去掉-DHAVE_MMXEXT -DHAVE_SSE2 -DARCH_X86

CFLAGS=-Wall -I. -O4 -ffast-math -D__X264__ -DHAVE_MALLOC_H -DSYS_LINUX

-DHAVE_PTHREAD -s -fomit-frame-pointer

LDFLAGS= -lm -lpthread -s

AS=nasm

ASFLAGS=-O2 -f elf

VFW=no

GTK=no

EXE=

VIS=no

HAVE_GETOPT_LONG=1

DEVNULL=/dev/null

CONFIGURE_ARGS= '--enable-shared' '--prefix=/root/arm-none-linux-gnueabi/armnone-

linux-gnueabi/'

SONAME=libx264.so.49

default: $(SONAME)

修改Makefile,将66~68行的ar和ranlib改为arm下的:

libx264.a: .depend $(OBJS) $(OBJASM)

arm-linux-ar rc libx264.a $(OBJS) $(OBJASM)

arm-linux-ranlib libx264.a

(3).编译安装

# make

# make install

这里可以在交叉编译链目录/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/的

lib下生成libx264.so

3 交叉编译xvid

到 http://downloads.xvid.org/downloads/xvidcore-1.1.3.tar.gz 下载xvid

下载xvid解压并进入build/generic

配置

# ./configure --prefix=/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/ --disableassembly

[解释]--disable-assembly :因为xvid没有针对ARM的汇编优化,所以编译时必须关掉汇

修改Makefile引用的platform.inc文件,将CC=gcc改为CC=arm-linux-gcc

# make

# make install

成功后进入example文件夹

测试,输入

arm-linux-gcc -o xvid_encraw xvid_encraw.c -lc -lm -I../src/ -L../build/generic/=build

-lxvidcore

即可生成xvid_encraw

这里可以在交叉编译链目录/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/的

include,lib下生成相应的头文件和库文件

4 交叉编译ffmpeg

到http://download.chinaunix.net/download.php?id=5532&ResourceID=2990在这个网址

上下载ffmpeg-0.4.9-p20051120.tar.bz2,然后解压。

修改configure文件,要修改的如下

由于cc、ar、ranlib、strip都是交叉编译环境中的执行文件,可以这样配置

prefix="/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/"

cross_prefix="root/arm-none-linux-gnueabi/bin/arm-linux-"

cpu="arm"

配置

# ./configure --cpu=arm --cc=arm-linux-gcc --enable-shared --disable-ffserver --enablexvid

--enable-x264 --enable-gpl --enable-pthreads --disable-strip

# make

# make install

这里可以在交叉编译链目录/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/的

include,lib下生成相应的头文件和库文件

至此,OpenCV所依赖的库都交叉编译完成,并在交叉编译链中的include,bin,share,lib下

有相应的文件

四 交叉编译OpenCV

下载OpenCV-1.0.0源码 http://www.opencv.org.cn/download/opencv-1.0.0.tar.gz

解压进入目录配置

# ./configure --host=arm-none-linux-gnueabi --without-gtk --without-carbon --withoutquicktime

--without-1394libs --with-ffmpeg --without-python --without-swig --enable-static

--enable-shared --disable-apps CXX=arm-none-linux-gnueabi-g++ CPPFLAGS=-

I/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/include LDFLAGS=-L/root/arm-

none-linux-gnueabi/arm-none-linux-gnueabi/lib --with-v4l --prefix=/root/opencv-arm

--libdir=/root/opencv-arm/lib --includedir=/root/opencv-arm/include

说明:

--host=arm-none-linux-gnueabi :指出交叉编译arm平台

--without-gtk:忽略gtk+2.0 windows

--without-carbon: 不使用Mac OS上的X库

--without-quicktime

--without-1394libs

--without-ffmpeg

--without-python

--without-swig

--enable-static :生成静态库

--enable-shared :生成动态库

CXX=arm-none-linux-gnueabi-g++ : 指定编译工具

CPPFLAGS=-I/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/include :

OpenCV会用到一些dev的包,如png.h,jpeglib.h,大部分头文件在/usr/include下

--prefix=/root/opencv-arm :指定安装目录

-libdir=/root/opencv-arm/lib: 指定库文件安装位置

--includedir=/root/opencv-arm/include:指定包含文件安装位置

如果配置正确,会有下面信息

General configuration ================================================

Compiler: arm-none-linux-gnueabi-g++

CXXFLAGS: -Wall -fno-rtti -pipe -O3 -fomit-frame-pointer

Install path: /root/opencv-arm

HighGUI configuration ================================================

Windowing system --------------

Use Carbon / Mac OS X: no

Use gtk+ 2.x: no

Use gthread: no

Image I/O ---------------------

Use libjpeg: yes

Use zlib: yes

Use libpng: yes

Use libtiff: no

Use libjasper: no

Use libIlmImf: no

Video I/O ---------------------

Use QuickTime / Mac OS X: no

Use xine: no

Use ffmpeg: yes

Use dc1394 & raw1394: no

Use v4l: yes

Use v4l2: yes

Wrappers for other languages =========================================

SWIG

Python no

Additional build settings ============================================

Build demo apps no

Now run make ...

===================================================================

===

# make

# make install

arm上运行OpenCV所需库:

1 将/root/opencv-arm/lib下生成的库文件

libcvaux.so.1.0.0

libcv.so.1.0.0

libcxcore.so.1.0.0

libhighgui.so.1.0.0

libml.so.1.0.0

拷出来全部重命名

*.so.1

2 加上之前的库文件,将/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/lib下的

libjpeg,xvid,x264,ffmpeg库都拷出来放去板子的/usr/lib或者/lib下,也可以复制到板子上一

个文件夹,然后#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/YOUR/lib/DIR

3 OpenCV所需库总表:


在linux下安装opencv - huhuixuefei - 小龟Blog

编译源文件方法
arm-none-linux-gnueabi-g++ demo.c -o demo -I/root/opencv-arm/include/opencv
-L/root/opencv-arm/lib -lcv -lcxcore -lpthread -lrt -lcvaux -lm -lpng -ljpeg -lz -lml -lhighgui
-ldl
最后,将生成的二进制文件拷到板子上就可运行

上面来自:《OpenCV移植到ARM全过程》 by Ken Cheung
 
  评论这张
 
阅读(5841)| 评论(5)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017