opencv4android 配置,配置OpenCV4Android开发环境

本文详细介绍了如何在Ubuntu 14.10上从源码编译安装OpenCV,包括下载源码、编译和安装步骤。同时,文章还讲述了在Android环境下配置OpenCV的过程,包括在Eclipse中导入OpenCV库,解决NDK路径问题,以及在开发板上移植OpenCV的注意事项和问题解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Archive for category OpenCV

在Ubuntu14.10上要如何从源码编译到安装OpenCV这个计算机视觉库呢?下面我们一直来感受下要如何操作:

1.安装必要工具:

由于需要下载源码和编译源码,我们使用sudo apt-get install git cmake命令安装最基本的工具。

2.编译安装OpenCV:

a.下载源码:

cd ~/

git clone https://github.com/Itseez/opencv.git

b.编译源码:

cd opencv

mkdir release

cd release

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

(release目录是为了保存编译过程产生的中间和目标文件,cmake是根据相关的配置文件生成Makefile)

make

c.安装OpenCV:

sudo make install

至此,相关库安装完成。

参考网址:

http://docs.opencv.org/doc/tutorials/introduction/linux_install/linux_install.html?highlight=install

Android NDK包解压在:$HOME/android/android_ide/android-ndk

Android SDK包解压在:$HOME/android/android_ide/android-sdk-linux/

从http://sourceforge.net/projects/opencvlibrary/files/opencv-android/下

载所需版本的OpenCV4Android库压缩包(我这边下载的是2.4.11,包名为OpenCV-2.4.11-android-

sdk.zip),

执行unzip OpenCV-2.4.11-android-sdk.zip命令解压到目录OpenCV-android-sdk中,接下来运行eclipse,在“Project Explorer”中单击右键,单击右键菜单“Import…”,弹出如下对话框:

64686715_1.gif

选择上图中的“Existing Android Code into Workspace”,然后单周“Next>”,弹出如下对话框:

64686715_2.gif

在“Root

Directory:”后面点击“Browse…”,弹出的对话框选择刚才解压出来的Opencv-android-sdk目录(如/home/xinu

/android/android_ide/OpenCV-android-sdk),默认会把相关的库和例子源码项目选中,此时点击“Finish”按

键即进行导入操作。此时在“Console”框中会有如下错误提示:

23:13:17 **** Auto Build of configuration Default for project OpenCV Tutorial 2 – Mixed Processing ****

/ndk-build.cmd

Cannot run program "/ndk-build.cmd": Unknown reason

看来是我们的NDK工具没有添加正确,此时我们在“Project Explorer”选中出错的项目,然后点击菜单“Project”-“Properties”,此时弹出如下对话框:

64686715_3.gif

上图的“C/C++ Build”一项点击后,在右边的“Build

Command:”一项可以看到值为“${NDKROOT}/ndk_build.cmd”,看来是NDKROOT没有设置,此时,我们点击“OK”退出

后再点击菜单“Windows”-“Preferences”,弹出如下对话框:

64686715_4.gif

在上图中点击“Android”-“NDK”,在右击的“NDK Location:”一项选择上相应的NDK包路径(如/home/xinu/android/android_ide/android-ndk),点击“OK”,重启eclipse后,仍有如下提示:

23:36:37 **** Auto Build of configuration Default for project OpenCV Tutorial 2 – Mixed Processing ****

/ndk-build.cmd

Cannot run program "/ndk-build.cmd": Unknown reason

Error: Program "/ndk-build.cmd" not found in PATH

PATH=[/home/xinu/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/xinu/golang/go/bin]

23:36:37 Build Finished (took 41ms)

此时,我们退出eclipse,在~/.profile文件中添加如下语句:

export PATH=$PATH:$HOME/android/android_ide/android-ndk:$HOME/android/android_ide/android-sdk-linux/platform-tools

然后注销后重新登录Ubuntu,此时再运行eclipse就不会有错误了,接下来我们运行例子Camera

Preview,有如下运行结果(运行前需到OpenCV-android-sdk/apk目录下将

OpenCV_2.4.11_Manager_2.20_armeabi.apk

应用先安装,该APK有针对不同的平台区分,请根据实际情况安装相应平台版本):

64686715_5.gif

http://docs.opencv.org/doc/tutorials/introduction/android_binary_package/O4A_SDK.html

本次的代码在Ubuntu10.04上测试,功能是(OpenCV是2.0的,在2.0中的cvSaveImage函数里多了一个参数可以设置保存

图片的质量)从电脑上的摄像头捕捉视频并一秒保存一张图片的效果并可以修改保存的图片的像素功能出发,实现了毫秒级保存图片的功能,代码如下(本程序在

OpenCV1.0下编译不通过):

//使用OpenCV实现获取摄像头数据并毫秒级(在我的机上70ms左右保存一张,连续保存)保存成一张jpg图片,jpg图片的大小可调,文件名为save_cam.c

//编译方法为:g++ `pkg-config opencv –libs –cflags opencv` savecam.c –o savecam

#include

#include

#include

#include

#include

#include

#include

#include

#include

int main( int argc,char ** argv )

{

//声明IplImage指针

IplImage* pFrame=NULL;

IplImage* pSaveFrame=NULL;

CvCapture* pCapture=NULL;

static char filename[40];

struct tm * tm_ptr;

struct timeb tp;

int p[3];

p[0] = CV_IMWRITE_JPEG_QUALITY;

p[1] = 10;  //质量值

p[2] = 0;

//创建窗口

cvNamedWindow(“video”,1);

//打开摄像头

if( !(pCapture=cvCaptureFromCAM(-1)) ) //此处值为-1表示自动搜索到的第一个摄象头,而0则表示第一个,1则表示第2个,以此类推。

{

fprintf(stderr,”Can not open camera.\n”);

return -1;

}

if(mkdir(“./Alert”,0755)==-1)

{

//创建时存在该目录会返回错误码,如不存在则创建它,但由于我们需要该目录,则出错也不处理

}

//逐帧读取视频

while(pFrame=cvQueryFrame(pCapture))

{

cvShowImage(“video”,pFrame);

if(cvWaitKey(2)>=0) break;

pSaveFrame=cvCreateImage(cvSize(320,240),pFrame->depth,pFrame->nChannels);

//get file name

ftime(&tp);

tm_ptr=localtime(&tp.time);

snprintf(filename, 40,

“./Alert/%04d%02d%02d%02d%02d%02d%04d.jpg”,tm_ptr->tm_year-100+2000,

tm_ptr->tm_mon + 1, tm_ptr->tm_mday,

tm_ptr->tm_hour,tm_ptr->tm_min, tm_ptr->tm_sec,tp.millitm);

cvResize(pFrame,pSaveFrame,CV_INTER_LINEAR);

cvSaveImage(filename,pSaveFrame,p);

cvReleaseImage(&pSaveFrame);

}

cvDestroyWindow(“video”);

cvReleaseCapture(&pCapture);

return 0;

}

在大学的时候,由于项目需要,将OpenCV移植到S3C2440的开发板上,下面是之前移植过程和碰到的问题解决过程:

首先,从http://www.opencv.org.cn下载1.0的源码包,然后解压出来,进入解压后的目录,再进行下面的修改:

将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 pkgconfig.”

# 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 <

##define HAVE_GTK

#_ACEOF

# else

have_gtk=no

# fi

修改完后进行下面的操作:

安装好交叉编译工具链后再进行如下操作:

./configure –host=arm-linux –prefix=/home/guochongxin/opencv-arm2/

–without-gtk –without-carbon –without-v4l –without-quicktime

–without-1394libs –without-ffmpeg –without-python –without-swig

在命令行里面加入了–without-v4l,因为编译时会出错,还有我暂时不用到v4l,如果你要做摄相头方面的应用,就需要去掉该参数,但编译时会出错,这个问题我也在改进中,有解决方法就会发出来共享.

上面的配置没有把libjpeg编译进去,也不会添加v4l,而配置修改为:

./configure –host=arm-linux –prefix=/home/guochongxin/opencv-arm

–without-gtk –without-carbon –without-quicktime –without-1394libs

–without-ffmpeg –without-python –without-swig  CXX=arm-linux-g++

CPPFLAGS=-I/home/guochongxin/crosstool/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/include

CFLAGS=-I/home/guochongxin/crosstool/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/include

LDFLAGS=-L/home/guochongxin/crosstool/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib

则在编译到v4l时没有错误提示,也把libjpeg编译进去,因为把libjpeg的路径也通过配置设置进去了,注意libjpeg之前要交叉编译才可以,也注意上面的路径,注意libjpeg库要放到交叉编译工具链的库中.

接下来进行下面的操作:

make

make install

这里会在/home/guochongxin/opencv-arm2/目录下安装编译成功的文件,接下来如果需要编译代码,则需要设置如下的环境变量:

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/guochongxin/opencv-arm2/lib/pkgconfig/

编译程序的方法是:

arm-linux-g++ `pkg-config –cflags –libs opencv` source.cpp -o destination

注意上面两个黑点是键盘上左上角波浪号在按下Shift键后输入的,而不是上引号,要区分开来.

上面步骤只是成功后发布出来,可能有小部分有问题,请根据实际情况修改,仅供参考,用到的交叉编译工具链是3.4.5版本的,制作过程在前面的博文有发表出来.

参考资料:《OpenCV 在Liod 开发板的移植及其应用》(华东师范大学电子系嵌入式竞赛组)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值