计算机视觉大作业Word文件下载.docx
- 文档编号:6905224
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:23
- 大小:2.79MB
计算机视觉大作业Word文件下载.docx
《计算机视觉大作业Word文件下载.docx》由会员分享,可在线阅读,更多相关《计算机视觉大作业Word文件下载.docx(23页珍藏版)》请在冰点文库上搜索。
根据游戏的类型,游戏外挂可以大致分为两类:
(1)将游戏中大量繁琐和无聊的攻击动作使用外挂自动完成,以帮助玩家轻松搞定攻击对象并可以跨度增加玩家的经验值,并取得更好的成绩。
(2)由外挂程序产生的欺诈性的网络游戏封包,并将这些封包发送到网络游戏服务器,利用这些虚假的信息欺骗服务器进行游戏数值的修改,达到修改角色能力数值的目的。
具体有可以分为模拟操作型、修改内存型、封包型等。
本文所编写的既是第一类游戏外挂。
在切水果的游戏中,游戏玩家需要注意在页面底侧飞出来的各种水果和炸弹,在游戏的初期水果和炸弹飞出的速度较慢,玩家玩起来很轻松。
伴随着游戏的进行,游戏的难度将增加,水果和炸弹的出现速度将越来越快。
眼花缭乱的水果和炸弹不仅增加了游戏的难度,对于该类游戏的爱好者的视力也将有一定的损伤。
因此,本文编写的外挂的目的既是自动识别水果和炸弹,并通过编写程序模拟鼠标操作,进而自动的完成大量的繁琐的切水果的操作。
第二章开发环境搭建
笔者在开始安装OpenCV的过程[3]中,遇到了很多问题,浪费了一些时间。
这里我给出一个简单的安装步骤。
具体如下所示:
Step1、下载一个较新的OpenCV安装包。
注意:
不要过新的OpenCV版本,笔者在开始时下载了最新的3.0版本的OpenCV,但是该版本与2.x版本的OpenCV有一定区别。
网络上也没有相关的教程,因此浪费了些时间。
笔者最终使用的是2.4.9版本的OpenCV。
Step2、下载OpenCV后,双击运行exe,选择输出(解压)目录,我选择的是C:
\opencv。
然后解压缩后就完成了整个安装。
Step3、配置OpenCV,这里是整个环境搭建的核心内容。
Step3.1在“我的电脑”右击弹出“系统属性”对话框,选择“高级”再点击“环境变量”,然后在“系统变量”中的Path对话框中输入:
“;
C:
\opencv\opencv\build\x64\vc12\bin”;
具体如图3所示。
图3配置环境变量
Step3.2打开项目的属性页面,单击“配置属性”,然后点击“VC++目录”,然后手动的加入库文件、引用文件和包含文件。
具体操作如图4所示。
图4OpenCV配置截图1
Step3.3在已经打开的项目的属性页面中,点击“链接器”,然后点击“输入”,然后手动添加附加依赖项。
具体操作如图5所示。
图5OpenCV配置截图2
至此,整个OpenCV环境已经搭建、配置完成。
但仍需说明的是,在程序运行时,需要在工程的Debug目录下添加一些DLL文件。
笔者为了方便,所以在该目录下添加了程序可能需要的OpenCV的全部DLL文件。
具体如图6所示:
图6添加DLL文件
第三章预分析与预处理
3.1游戏选择
在确定游戏为“切水果”类型的之后,笔者试完了多个不同版本的切水果的游戏。
通过试玩,笔者发现一部分游戏背景复杂,与传统的切水果游戏相差较大,需要处理内容较多,需要程序进行的控制,以及游戏策略均很复杂,这一类游戏如图7中的“切水果完美版”所示。
图7切水果完美版图8喜洋洋切水果
还有一部分游戏,游戏开发者可能是为了开发速度,或是降低玩家的难度,不需要用鼠标滑过水果(可能是食物),只需要用鼠标左键点击食物的周围区域即可。
这类游戏如图8中的“喜洋洋切水果”所示。
通过试玩,笔者发现这一类游戏很容易“错切”。
还有一部分游戏,与传统的切水果游戏很接近,水果飞出速度合理,鼠标滑过水果后,屏幕出现划痕,切碎的水果自动掉落,如图9中的“简约切水果”所示。
个人感觉这样的游戏,控制策略简单;
需要的图像处理始终;
需要识别的内容也叫简单。
因此很适合笔者来写这第一个游戏外挂程序。
图9简约切水果
3.2获取实验源图像
确定具体游戏后,笔者编写了一个简单小程序。
通过简单的人机交互,即可获得目标区域的图像,通过设置定时器时间,可以每个30ms读取一次屏幕中目标区域,并将目标区域图像保存至特定目录。
本文中人机交互图片如图10所示,实验中保存了500张实验图片,其中部分实验图如图11所示。
图10人机交互图
图11部分实验图
3.3背景减除
考虑到实验图中背景单一不变,且游戏运行开始时,游戏中并没有飞出任何水果或是炸弹。
因此笔者多次调试程序,终于获得了背景图片,如图12所示。
图12游戏背景图片
而后,笔者编写简单的背景减除代码,去掉了全部背景,结果如图13所示。
图14背景减除后效果图
3.4颜色空间分析
考虑到后期需要检测和识别水果、水渍、切过的水果和炸弹等。
因此如果这些在颜色空间有不同的分布,那么便可选择一种对水果更加敏感的色彩空间来表示本文中的实验图像。
接下来的处理过程复杂度将会大大减小。
因此笔者简单学习了一下四种颜色模型[4,5]。
(1)RGB颜色模型
RGB(Red,Green,Blue)颜色模型是最常见的颜色模型,RGB描述的是红绿蓝三色光的数值。
其中R代表着Red红色,G代表着Green绿色,B代表这Blue蓝色。
通过这3种基本的颜色不同组合,即可合成约1670万种颜色。
(2)YUV颜色模型
YUV颜色模型是视频中常采用的色彩表示方法,Y指颜色的亮度(Brightness),U和V是两个色差信号。
YUV颜色模型的亮度信号和色差信号U、V是分离的,可以单独处理。
根据一个场景内色度总是基本一致且单一,即使是属于不同摄像头的相邻两帧,其色度也具有变化不大的特点。
它和红、绿、蓝三色光的关系可用如下式的方程描述:
Y=0.3R+0.59G+0.11B这就是常用的亮度公式。
色差U、V是由B-Y、R-Y按不同比例压缩而成的。
(3)HSV颜色模型
HSV(色相hue,饱和度saturation,明度value),也称HSB(B指brightness)是艺术家们常用的,因为与加法减法混色的术语相比,使用色相,饱和度等概念描述色彩更自然直观。
HSV是RGB色彩空间的一种变形,它的内容与色彩尺度与其出处——RGB色彩空间有密切联系。
(4)HSL颜色模型
HSL(色相hue,饱和度saturation,亮度lightness/luminance),也称HLS或HSI(I指intensity)与HSV非常相似,仅用亮度(lightness)替代了明度(brightness)。
二者区别在于,一种纯色的明度等于白色的明度,而纯色的亮度等于中度灰的亮度。
由于以上颜色模型均很常见,所以各个颜色模型间的转换关系这里就不一一列出了。
同时为了更加清晰了解每个色彩模型对本实验中图像的敏感程度,笔者手动合成了一张几乎包含所有可能出现的图形的图片,如图15所示。
而后笔者通过MATLAB展示了图15在RGB、YUV、HSV、HIS四种颜色模型中的具体表现效果,分别如图16(a)、图16(b)、图16(c)、图16(d)所示。
图15合成图片
(a)RGB颜色空间显示效果
(b)YUV颜色空间显示效果
(c)HSV颜色空间显示效果
(d)HSI颜色空间显示效果
图16不同颜色空间的显示效果对比图
色彩空间分析比较:
通过分析比较,可以发现切过的水果和未切的水果,在不同的模型和分量下,显示效果相近,并未出现对某个特定的颜色空间特别敏感这一现象。
有考虑到,数据读入时便是RGB形式,如果采用其他颜色空间还需要再次进行转换,无疑增加了计算量。
因此笔者采用的是RGB颜色模型。
因为RGB颜色模型中,B分量与背景差异最大,因此选用该分量进行后续的处理。
3.5目标区域下采样
考虑到本文所写程序为游戏外挂,因此游戏的处理时间越短越好。
因此本文从每个角度上考虑,以尽可能的减少程序占用的资源与运行时间,因此本文首先将目标区域中的1/2作为最终的目标区域,如图17中红框内的图像所示,此时图像的分辨率为760*200,数据量为760*400*3=912000Bytes=890.6KB。
因此,笔者在此将图像下采样处理,图像依旧保留原来的特征,而且最终图像的分辨率为380*100,数据量变为原目标区域的1/4大小,一定程度上减少了处理内容,提高了程序运行速度。
最终图像下采样后的图像如图18所示。
图17缩小后的目标区域示意图
图18下采样后图像示意图
3.6中值滤波
中值滤波[6]是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。
中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。
方法是用某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。
二维中值滤波输出为g(x,y)=med{f(x-k,y-l),(k,l∈W)},其中,f(x,y),g(x,y)分别为原始图像和处理后图像。
W为二维模板,通常为3*3,5*5区域,也可以是不同的的形状,如线状,圆形,十字形,圆环形等。
考虑到图像减除背景后,其B分量图像中存在少量白色噪声点,在后期的处理中会在一定程度上影响处理效果,因此本文采用中值滤波方法对图像进行铝箔处理。
原图像与处理后的图像如图19和图20所示。
图19B分量原始图
图20中值滤波后图像
3.7膨胀与腐蚀
通过观察,发现如果图像中出现水渍的话,那么会有很多的小的轮廓出现。
后续的计算中,这些小的水渍也将增加计算的时间。
因此笔者采用膨胀和腐蚀处理方法对图像进行处理。
需要说明的是:
OpenCV中膨胀和腐蚀均是针对白色区域进行的。
本文中原始图像、腐蚀之后的图像、膨胀之后的图像如图21所示。
(a)原始图像
(b)腐蚀之后的图像
(c)膨胀之后的图像
图21膨胀与腐蚀操作示意图
通过对比可以发现,最后经过膨胀处理后,图像中较小的水渍几乎都已经被处理掉了,效果很好。
第四章检测与识别
在基本的图像预处理之后,已经获得了较好的待处理图像。
因此笔者开始着手目标的检测与识别工作。
笔者选择了一些常见的方法,对图像中的未切水果、非未切水果和炸弹进行检测和识别。
4.1霍夫变换检测圆
霍夫变换简介:
计算机视觉中经常需要识别或者定位某些几何图形,比如直线、圆、椭圆,还有其他一些图形。
检测直线的霍夫变换提供了在图像中寻找直线的一种算法,是最简单的一种情形,后来发展到检测圆、椭圆、还有一般图形的霍夫变换,其核心思想是把图像中属于某种图形的点集(二维)映射到一个点(可以是高维)上,这个点记录了点集中点的数目,使得程序通过搜索峰值找到该点,这个点就是后面要说到的图形的参数,而该参数的范围就叫做参数空间。
霍夫变换检测圆的原理这里不再赘述,如有需要请参考文献[8]。
另外对于OpenCV下该函数原型,以及各项参数的含义这里也不再给出,如有需要请参考文献[9]。
笔者在用该函数进行识别时发现,检测效果与参数设置有很大的关系,经常会出现错误检测和漏检。
错检的示意图如图22所示。
通过多次尝试,笔者发现该方法错误率和漏检率太高,难以应用于本文的应用。
图22霍夫变换检测圆示意图
4.2边缘检测
图像边缘检测大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。
有许多方法用于边缘检测,它们的绝大部分可以划分为两类:
基于查找一类和基于零穿越的一类。
基于查找的方法通过寻找图像一阶导数中的最大和最小值来检测边界,通常是将边界定位在梯度最大的方向。
基于零穿越的方法通过寻找图像二阶导数零穿越来寻找边界,通常是Laplacian过零点或者非线性差分表示的过零点。
本文采用的是OpenCV自带函数cvCanny(),函数cvCanny采用CANNY算法发现输入图像的边缘而且在输出图像中标识这些边缘。
函数的参数这里同样不予给出,如有需要请参考文献[10]。
边缘检测的示意图如图23所示。
(a)边缘检测示意图1(b)边缘检测示意图2
图22边缘检测示意图
4.3轮廓周长与面积约束
边缘检测后,笔者发现一些边缘的轮廓很长,有一些很多;
有些轮廓的面积很大,有些则很小;
而这些都不是未切的水果。
而在笔者查找资料的过程中发现,OpenCV中自带检测轮廓面积和周长的函数,因此笔者调用函数去除掉了这些周长和面积不符合要求的轮廓。
实际绘制后,目标的轮廓为多边形。
这对于后期的再次处理有一定的影响,因此,笔者根据轮廓的位置,对目标在此处理——用矩形框框住目标轮廓。
实验结果示意图如图24所示。
有本图可以看出,本文的处理时间基本满足实时性的需要,单帧处理时间为25ms左右。
图24轮廓约束并外接矩形框示意图
4.4保留检测出的样本
为了更好地分析,不同的目标之间的区别与识别,笔者编写了一个简单的小程序,保存了300张目标图像。
如图25所示。
图25目标图像示意图
4.5样本分类
为了找出不同的目标图像之间的区别,笔者计算了各个目标矩形框的内图像的像素差值的均值和均方差,甚至还计算了目标图像的频谱信息。
但是都没有找到明显的区别。
当然,全黑的炸弹可以非常轻松的识别出来。
本文还通过MATLAB的imtool()工具详细观察了图像上的每一个像素值,其示意图如图26所示。
图26查看图像的像素值示意图
4.6颜色对比
通过多种方法,依旧没有去除掉已经切过的水果,因此笔者编写了一段小程序,检测图像中出现的特殊颜色,如图27中的红色。
检测到特殊颜色后即标记这个目标区域为已经切过的水果,不再此切割。
最终去除掉了已经切过的西瓜、划痕、切过的梨子等。
图27中最右侧对比图中的白色区域为检测到的红色,本文的程序即是根据这些白点的多少判断是否为未切水果。
图27颜色对比排除示意图
第五章C++程序模拟鼠标操作
接下来,笔者学习了如何通过编写程序来模拟鼠标[11]的一系列动作。
包括鼠标的单击和左键按住滑动(切水果时的动作)。
虽然笔者研究了很长时间的C++模拟鼠标的操作,也查找了很多的参考资料,但是,可能是由于笔者接触Windows编程较少,仅仅实现了鼠标的单击操作。
未能实现鼠标的拖动操作。
因此也导致最终本文未能完成预期的设计。
图28模拟鼠标操作函数
第六章总结
本文,使用了多种图像处理的方法,对于游戏中的动画图像进行了大量的处理。
最终成功的识别出了未切水果,当然其中包含少量的已经切过的水果。
但是由于最终没用将程序模拟鼠标操作做出来,没有达到预期的期望。
但是笔者在整个程序的设计和编写过程中学到了很多。
主要包括以下三点:
1、体会了课上老师所讲的多种图像处理的方法和颜色空间。
2、将OpenCV应用到了实际的程序中,体验到了OpenCV的高效与便捷。
学会了很多OpenCV的API的使用方法。
3、整个程序编写耗时近3周,总共编写代码近900行。
可以说一定程度上锻炼了个人的编程能力。
由于笔者的研究方向和今后所使用的研究平台均与图像处理和OpenCV息息相关,可以说这一次的锻炼对今后的学习也会有一定的帮助。
参考文献
1、瑞祯,仕琪.OpenCV教程:
基础篇[M].北京航空航天大学出版社,2007.
2、彭建胥.API在VB编写游戏外挂中的应用[J].福建电脑,2008(6):
170-170.
3、
4、聂洪印,周卫东,刘辉.多颜色模型和综合特征下的车牌定位新方法[J].计算机工程与应用,2010.
5、孟章荣.各种颜色模型选用需求分析[J].中国图象图形学报:
A辑,1996,1(3):
238-241.
6、刘丽梅,孙玉荣,李莉.中值滤波技术发展研究[J].云南师范大学学报:
自然科学版,2004,24
(1):
23-27.
7、欧先锋,贾振红,郝军.多结构抗噪膨胀-腐蚀型数字灰度图像边缘检测的研究[J].激光杂志,2009,30
(1):
40-41.
8、朱桂英,张瑞林.基于Hough变换的圆检测方法[J][J].计算机工程与设计,2008,29(6):
1462-1464.
9、
10、
11、
附录:
这里给出本文程序编程过程参考的一些网络资料的链接,具体如下所示:
游戏链接:
OPENCVAPI相关链接:
WindowsAPI相关链接:
MATLAB相关链接:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 视觉 作业