opencv裁剪移并植到android实现游戏中的数字识别

opencv裁剪并移植到手机实现游戏中的数字识别

 

       







前言

前段时间因为公司项目需要需要对手机游戏中的数字进行识别。项目已基本完成,在此留下自己的思路,希望能给大家借鉴下。主要内容有:

· Opencv的裁剪与移植

· 数字提取与分割

· 数字识别与输出

Opencv的裁剪与移植

因为android手机上的apk包不能太大,我们整个项目的apk大小不到1M大小我最终将opencv裁剪并实现数字识别的所有代码编译成so文件大小只有250k左右的大小。(编译成so文件android可以通过jni调用)

源码说明与裁剪

本节主要介绍OpenCV中C语言版(OpenCV2.0以下)和C++语言版(OpenCV2.2以上)各模块功能,以及构架图。

OpenCV模块

首先,我们介绍1.0至2,2版,OpenCV库划分为以下几个模块。

图1 OpenCV1.X库模块

· CV :   主要OpenCV函数,即:核心函数库

· CVAUX :  辅助函数库

· CXCORE :  数据结构与线性代数库(包含CvPoint、CvRect、CvSize、CvMat及lpiImage等常用数据结构);

· HIGHUI : GUI函数库(用户交互界面,如图像显示、接受鼠标键盘事件等。已经包含视频、摄像头简单操作);

· ML :  机器学习函数库,包含模式分类和回归分析等;

· CVCAM :视频图像处理模块(一般还需要安装DirectShow。此模块在2.0之后的版本好像不再包含,而直接使用highgui)。

在windows下较低版本(2.0以下)的OpenCV中包含此模块,一般用于处理和操作摄像头和视频流的跨平台模块,在windows下 被封装成.dll动态链接库,在Linux中被以so(共享库,和动态链接库类似)的形式使用。

然而,自从2.2版开始,OpenCV库便被划分为多个模块。这些模块编译成库文件后,位于lib文件夹中。

图2 OpenCV2.X库模块

· opencv_core模块,其中包括库中核心函数结构,特别是基础的数据结构和算术函数。

· opencv_imgproc模块,包含图像处理函数。

· opencv_highgui模块,包含读写图像及视频的函数,以及操作图形用户界面函数。

· opencv_features2d模块,包含兴趣点检测子、描述子以及兴趣点匹配框架

· opencv_calib3d模块,包含相机标定、双目几何估算以及立体视觉函数。

· opencv_video模块,包含运动估算、特征跟踪以及前景提取函数与类

· opencv_objdetect模块,包括物体检测函数,如脸部与行人检测。

库中还有其他的工具模块,如机器学习(opencv_ml)、计算几何(opencv_flann),第三方代码 (opencv_contrib),废弃的代码 (opencv_legacy)及GPU加速度过的代码 (opencv_gpu).这些模块都有一个单独的头文件(位于include)。

OpenCV2.X架构图

如下图所示:


参考资料

[1] Robert Laganiere ,"OpenCV 2 Computer Vision Application Programming Cookbook",Packt Publishing 2011.

 

源码裁剪

Cv   

       cv.h    图像处理函数库的声明

Cvcore     

cxtypes.h   Array allocation, deallocation, initialization and access to elements         Mat , IplImage  等数据结构的定义

cvcore.h   

数据内存分配,释放,初始化,访问等操作函数的声明   Array allocation, deallocation, initialization and access to elements  

cxarray.cpp       

//  CvMat, CvMatND, CvSparceMat and IplImage support functions

//  (creation, deletion, copying, retrieving and setting elements etc.)   

cxdatastruct.cpp    

Functions for manipulating memory storage - list of memory blocks      

Cxcopy.cpp  CV_IMPL void cvFlip( const CvArrsrcarrCvArrdstarrint flip_mode )  在saveImage中调用,还可裁剪                      

Highgui   loadsave.cpp         //加载图片Loading and saving IPL images.

Cxpersistence.cpp    很大,需裁剪  留下 cvRelease

 

数字提取与分割

数字提取与分割这种一般根据特定环境来分析,这里就不多介绍了

 

数字训练与识别

训练样本如下所示

 


由于bmp图片比较大,最终移植到手机上的是采用png 格式的(作为一个sdk,包还是不能太大)

识别:

   设计一个好的分类器,opencv里面在机器学习那个模块已经提供了很多相关实现,k邻近,支持向量等。或者自己设计一个分类器也可以。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值