完整word版个人毕业设计基于python开发的图像.docx
- 文档编号:17541292
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:23
- 大小:191.34KB
完整word版个人毕业设计基于python开发的图像.docx
《完整word版个人毕业设计基于python开发的图像.docx》由会员分享,可在线阅读,更多相关《完整word版个人毕业设计基于python开发的图像.docx(23页珍藏版)》请在冰点文库上搜索。
完整word版个人毕业设计基于python开发的图像
河北大学工商学院
本科生毕业论文(设计)
题目:
基于python开发的图像
采集器之Airppt
学部
学科门类
专业
基于python开发的图像采集器之Airppt
摘 要
本文设计了一个基于python开发的图像采集器,该设计通过普通的USB数字摄像头来捕捉和获取实时图像,利用linux系统下的python脚本中的Opencv图像处理模块和Huigui摄像头识别模块实现了采集图像信息并对图像信息进行分析的功能,该设计具有可靠性高、灵活稳定、低成本的特点,基于python开发的图像采集器将采集到的数据输入到python脚本进行分析处理,并从外部引入C编程,根据不同的处理结果,系统将会调用不同的C程序,从而实现对ppt的翻页.本文系统介绍了用python开发的图像采集器基本满足设计要求。
关键词:
图像采集器;Python语言;PythonC扩展;混合语言编程
Developmenttheimageacquisitionbasedonpython
ABSTRACT
Designonebasedonpythondevelopmentofimagecapturedevice,thedesignbyordinaryUSBdigitalcameraheadtocaptureandaccesstoreal-timeimageusingpythonscriptinlinuxsystemOpencvimageprocessingmoduleandHuiguicameraheadidentificationmoduletoachievethecaptureimageinformationandimageinformationanalysisfunction,thedesignhashighreliability,flexibleandstable,low—cost,willbecollectedbasedonthethepythondevelopmentofimageacquisitiondatainputtoapythonscriptanalysisandprocessing,fromtheoutsidetotheintroductionoftheCprogramming,dependingontheprocessingresults,thesystemwillcalltheCprogram,inordertoachievethenextpageofppt。
Weintroducethebasicmeetthedesignrequirementswiththethepythondevelopmentofimageacquisition。
Keywords:
Imageacquisition;Python;PythonCextension;Mixed—languageprogramming
目 录
2.2 Python语言特性4
3 设计思路和编程5
3。
1 设计思路5
3。
2 设计流程图5
3.3 编程6
3.3.1 Opencv模块引用6
3.3.2 Highgui模块引用6
3。
3。
3 Image模块引用6
3。
3.4 Os模块引用6
3。
4 python与C混合编程接口问题6
1引言
信息和网络技术的飞速发展,使得图像信息量激增,人们对检索图像信息的需求也日益增加。
作为一种纯面向对象的动态脚本语言,python已经在网络应用软件、系统配置软件及科学研究领域获得了广泛的使用,因此本文介绍了一种基于Python的利用Linux平台下Python与C++/C++语言的两种Os。
systeam接口,实现了python与VC的混合语言编程,并将这种软件结构应用于一套图像采集器系统。
实际应用表明,这种结构可以充分发挥Python编程的灵活简单和VC执行效率高的优点,克服Python执行效率低和VC开发效率低的缺点,实现了软件开发效率和执行效率的双赢.
当今社会,科技发达成长了人们的懒惰性,利用各种机器设备做家务,利用远程监控来遥控远在千里之外的东西,总之一切事务趋于自动化。
图像采集器(Imageacquisition),是指通过摄像头采集图像信息,批量获取图像信息,能够根据图像信息获取到物体运动的位移和执行的动作,这样采集到的图像信息分析更加的准确,可靠性更强。
本文设计了一种不用点击鼠标,不用按下键盘,只需要轻轻的挥挥手就可以操纵PPT的翻页的软件-—Airppt,解决了以往操作PPT的繁琐性,满足了人们对方便快捷生活的向往,并且提升了宣讲效率。
有了airppt,老师上课讲课就不用总在电脑旁用鼠标控制ppt,这样就加大了老师与学生的互动性。
Airppt利用的原理就是图像采集器,它在国内外应用广泛,并且发展迅速,在国外它应用于军事,医疗,监控等领域.在国内还没有太多的应用,据目前了解到的在国内一般应用于监控的比较多,还有运用于娱乐的,通过采集器将用户的身形采集到屏幕中并且可以采集到你的动作与里面的事物发生互动.
本文通过对模块应用环境及功能的认证,确定了应用opencv模块处理图像,huigui模块来识别并调用摄像头采集信息,image模块处理采集到的图像大小等,os模块引入外部C扩展,在利用python代码将这些功能连接起来,最终实现了airppt的相关协议所设定的功能。
本文主要研究内容如下:
(一)opencv模块的安装调用及作用;
(二)Image模块的用法安装;
(三)Huigui模块的用法及调用;
(四)Python外部C扩展的引入;
本设计采用python程序编写,硬件只需一个外置摄像头作为采集信息的工具.
2Python语言介绍
2.1Python语言简介
Python是一种解释型、交互式、纯面向对象的脚本程序设计语言,它结合了多种不同语言最经典的设计原则和思想.自1990年GuidovanRossum发明Python以来,它的简单、清晰和优雅吸引了广泛的关注,Python社区以每两年翻番的速度迅速扩张.例如:
Python自google创建之初就是其主要网络应用开发工具;美国国家航空航天局使用Python开发CAD/CAE/PDM资源库,在此基础上建设新一代协作式工程环境NGCEE(NextGenerationCollaborativeEngineeringEnvironment);美国国家研究推进机构CNRI(CorporationforNationalResearchInitiatives)1999年启动的ComputerProgrammingforEverybody(C4PE)计划将Python作为未来程序设计语言向教育机构推广;Microsoft于2005年推出IronPython的开源项目,在VisualStudio2005中接纳Python语言作为唯一动态脚本语言开发.net应用程序[16]。
2。
2Python语言特性
相比其他任何程序设计语言,Python允许软件设计者更关注于问题本身而不是实现细节,其主要特性有:
(l)面向对象Python是一种纯面向对象语言,支持面向对象的所有机制,这使它可以应用于大型软件项目开发。
(2)虚拟机机制Python代码编译为字节码在虚拟机上执行,这种类似Java的机制使Python具有平台无关性,并获得比其他脚本语言更快的执行效率。
(3)内置高级数据类型Python中的元组、列表、数组、字典等高级数据类型具有极强的表达能力,几乎任意复杂的对象在Python中均可以以最简单的方式进行描述。
(4)交互式开发方式和单元测试类似Foxpro和Matlab,Python提供了内置交互式窗口,可以允许开发者边尝试边书写代码,极大地提高了软件开发效率。
另外单元测试机制在每个类代码完成后均可以单独执行、测试。
这两种开发方式使得”搭积木"式的软件开发过程成为现实.
(5)动态执行特性类似早期Dbase系统的宏代替、Python允许动态构造程序代码并执行,使得软件中的重复代码得到简化.
(6)高度可扩展性Python语言本身只实现了一个小内核,其强大功能体现在大量的扩展模块。
计算机科学领域几乎所有的已知算法均可找到Python语言扩展.不仅c/c++编写的程序可以方便地改写成Python扩展模块,而且Python自身也可以被嵌人到口C/C++项目中。
(7)平台无关性Python字节码可以不经修改跨平台运行在所有主流操作系统上,甚至包括PocketPC、Palm等嵌入式系统[1]。
3设计思路和编程
3.1设计思路
本文的设计思路是:
(1)。
编辑器的选择:
python固定的编辑器是vim编辑器,这个编辑器很容易实现脚本的创建保存和运行,能大大提高程序员的编程速度,它还有一个非常强大的功能,在电脑发生意外突然关机的情况下,这个编辑器就会自动保存你之前你没有保存的程序。
这样就不会丢失有用的信息
(2).图像坐标的产生:
设计中采用的是判断红点的个数,红点指定义的一个红色RGB色调,当我们动作时就会采集到红点动作的个数,通过判断红点的个数,来判断鼠标是否要动作,通过动作的位移来判断鼠标动作的方向。
(3)。
图像的处理:
图像的处理是用Image模块处理的,可改变图像的大小,像素等,这样就可以把采集到的图像信息处理成所需要的。
(4).摄像头接口的处理:
这里用的是Opencv模块来实现图像的坐标的采集,opencv的设计意图是为用户提供简单易用的图形用户接口。
(5).动作的反馈:
当你用手在摄像头前挥动时,该动作就会被程序所识别,然后发出相应的相应.
(6)。
功能的设定:
这些功能是由C语言写的,然后引入os模块,通过os模块将写好的C功能引入到脚本语言中去.然后再用判断语句,当程序符合哪种条件是就会执行哪些C功能。
2软件编程思想
本文的软件编程思想是:
摄像头要采集手指运动的图像,来判断执行什么样的动作,那么摄像头怎么样才能识别你的手指呢?
本文在这里是用颜色(R,G,B)来解决的,本设计把手指用(R,G,B)定义成红点,现在红点就代表手指,应用指令控制摄像头来采集红点。
这是本设计的第一步打算。
第二步,需要采集的目标已经确定,接下来就是判断红点的运动方向和位移,我这里是通过判断红点运动的方向来确定对airppt执行什么样的动作;通过红点的位移和个数来确定airppt是否要执行该动作,本设计在这里定义的是位移大于70mm,红点个数大于20个时airppt才会执行相应的动作.因为动画都是由一张张图片组成的,假如不判断位移,当你不动作时它也会自动采集红点,进而发生动作反应,这样就出错了。
这里的中心思想就是if判断语句,事件处理系统和for循环语句。
3。
2设计流程图
本文定义的参照物是一个用代码编写的RGB红点。
并且分析每张图片的红点数,当红点数达到70个时将该图片列为有效图片,否则无效。
图3-1设计全局架构结构图
图3-1是本设计的全局架构结构图,是本设计得以实现的最重要部分,对获取到的图片分析是否有效,接下来则是细节部分,分析两张最近的有效图片中心点位置来判断左翻页还是右翻页还是不翻页。
图3-2有效图片筛选架构图
图3-2实现的是对有效图片进行分析,通过判断最近两张有效图片的中心位置点的位置关系来决定ppt是否执行动作,执行动作时是左翻页还是右翻页等一系列功能。
完成这一步所需的程序如下:
iflen(list2)〉20:
#如果列表中坐标个数大于20个
iflen(list2)〉20:
tn3=list2[-1][0]—list2[0][0]#将横坐标的长度赋值给tn3
tn4=list2[-1][1]-list2[0][1]#将纵坐标的长度赋值给tn4
whilelen(list2)>3:
#
list2.pop(0)
#print’.。
.。
。
。
.。
.....。
..。
。
..。
。
..。
.’,tn3
#printtn4
iftn4〉50andtn3>-50andtn3<50:
os。
system(’./a.x71’)
iftn4<-50andtn3>-50andtn3<50:
os.system(’./a.x9’)
iftn3<—100:
os.system(’./a.x114’)
#print'[right]’
#time.sleep(0。
8)
iftn3>100:
os.system('./a.x113’)
#print'[left]’
#time.sleep(0。
8)
每次判断完一张图片后,就把列表中的红点数目与坐标等都删除.这样就不会对下一张图片造成影响。
3.3编程
在开始编程之前要先确定编程工具,本设计用的是vim编辑器。
这个编辑器的最大优势就是,在意外情况下可以自动保存代码.当代码错误时,会提示错误信息,能够及时进行修改.以下是本设计的部分代码:
#!
/usr/bin/python
这是解释python语言在电脑中的位置
#-*-coding:
UTF—8—*-
这是python脚本中的中文解释器
3.3。
1 opencv模块
importopencv
从外部引入opencv模块
本设计用到的opencv代码如下:
cam=highgui.cvCreateCameraCapture(0)#定义摄像头端口位置
tn1=opencv.adaptors.Ipl2PIL(im)#采集到的图像定义为tn1
OpenCV的全称是OpenSourceComputerVisionLibrary,是一个跨平台的计算机视觉库。
OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。
OpenCV可用于开发对实时的图像处理、计算机视觉以及模式识别程序。
OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。
该库也有大量的Python,JavaandMATLAB/OCTAVE的接口。
这些语言的API接口函数可以通过在线文档获得。
现在也提供对于C#,Ch,Ruby的支持。
安装Opencv所需的依赖工具:
cmake,gtk+*,ffmpeg*,gstreamer*
编译安装:
$cd$DIR
$mkdirrelease
$cmake—DCMAKE_BUILD_TYPE=RELEASE-DCMAKE_INSTALL_PREFIX=/usr/local-DBUILD_PYTHON_SUPPORT=ON..
$make—j
$makeinstall
3。
3.2 highgui模块
fromopencvimporthighgui
从opencv图形处理模块中引入highgui模块.HighHGUI只是用来建立快速软件原形或是试验用的。
它的设计意图是为用户提供简单易用的图形用户接口。
本设计用到的highgui模块如下:
im=highgui。
cvQueryFrame(cam);这里highgui用来采集图像
OpenCV为了用于生产级别的应用而设计的。
HighHGUI只是用来建立快速软件原形或是试验用的.它的设计意图是为用户提供简单易用的图形用户接口。
通常,你需要读入源图像到你的程序或者输出结果图像到磁盘。
此外,需要用简单的方法显示图像到监视器并且向用户提供输入。
如果你试图创建最终用户的应用,请不要使用HighGUI。
相对来说,应当为你的目标系统参考特定的函数库.比如:
HighGUI中的摄像头输入方法(cvCreateCameraCapture)是为了易用而设计的。
然而,并不意味着它能够对热插拔作出反应等等[2]。
3.3.3 image模块
importImage
引入图像模块,对采集到的图像进行处理
本设计用到的image模块代码:
tn1=tn1.resize((160,160))#重新设置采集到的图像的大小
size1=tn1。
size#将重新设置的图像的大小值定义位size1
pbb=tn1。
load()#载入图像
PythonWare公司提供了免费的图像处理工具包PIL(PythonImageLibrary),该软件包提供了基本的图像处理功能,如:
改变图像大小,旋转图像,图像格式转换,色场空间转换,图像增强,直方图处理,插值和滤波等等.虽然在这个软件包上要实现类似MATLAB中的复杂的图像处理算法并不太适合,但是Python的快速开发能力以及面向对象等等诸多特点使得它非常适合用来进行原型开发。
在PIL中,任何一副图像都是用一个Image对象表示,而这个类由和它同名的模块导出,因此,要加载一副图像,最简单的形式是这样的:
importImage
img=Image。
open(“dip。
jpg”)
注意:
第一行的Image是模块名;第二行的img是一个Image对象;Image类是在Image模块中定义的。
关于Image模块和Image类,切记不要混淆了.现在,我们就可以对img进行各种操作了,所有对img的操作最终都会反映到到dip。
img图像上。
这个模块提供了一个常用的图像增强工具箱。
可以用来进行色彩增强、图像叠加、改变图像大小、亮度增强、对比度增强、图像尖锐化等等增强操作.所有操作都有相同形式的接口——通过相应类的enhance方法实现:
色彩增强通过Color类的enhance方法实现;亮度增强通过Brightness类的enhance方法实现;对比度增强通过Contrast类的enhance方法实现;尖锐化通过Sharpness类的enhance方法实现.所有的操作都需要向类的构造函数传递一个Image对象作为参数,这个参数定义了增强作用的对象。
同时所有的操作都返回一个新的Image对象.如果传给enhance方法的参数是1。
0,则不对原图像做任何改变,直接返回原图像的一个拷贝。
3.34 os模块
importos
引入os模块,os模块提供了一个统一的操作系统接口函数
本设计引用os模块所实现的代码如下:
os.system(’。
/fake-mouse-move.x0’+str(m)+''+str(n))#引入用C语言编写的程序
PythonC扩展
一个C源程序中的算法开发测试完毕后,可以改写为pythonC扩展暴露给Python程序使用。
例如将C源程序中的foo函数转换为python语言的扩展,需要以下步骤:
(l)包含python。
h的头文件,连接pythonXX.lib(XX是python版本号),其中Python。
h定义了所有Python的内部数据结构和C的API函数原型。
(2)定义一个此扩展模块的异常对象。
(3)实现一个客户端函数,这个函数负责将传入的python对象参数转换为C对象并用这些参数调用foo函数,最后将结果转换为python对象返回,如果出现错误,则设置异常对象并返回Null。
这个客户端函数充当python和C程序之间的参数调度者。
(4)填写一个扩展模块定义的所有函数名与客户端函数对应关系表,实现python程序和C程序的映射。
(5)完成扩展模块的初始化函数[11]。
3。
4 C语言与Python语言混合编程的接口问题
整个软件编程主要是用Python语言,C语言只占了一小部分,因此设计中,将用C语言编的求解器做成一个扩展模块,嵌入到Python语言中。
下面给出了在本软件中的接口设计方法.
第一步,将用C语言编写的代码在C编译器中编译调试成功;
第二步,在C代码中加入#include“Python。
c”这条语句,告诉C编译器将要调用Python库函数.
第三步,在C代码中的主函数加上"PyObject*Module_func()”Python打包器,此打包器的作用是把接受到的Python类型的值转换成C语言数据类型的值,并用这些值做为实参,放到相关的函数中去计算,计算完成后,如果要将结果输出到Python编写处理器中,必须由打包器接受计算结果并把它们转换成Python语言数据。
经过以上步骤即可完成C语言和python语言的混合编程。
Python中将这些步骤封装成了一个方法,即Os。
system(),但是python中识别C代码需要这样的格式:
os.system(‘。
/...’)[8]。
4功能分析及预期效果
一、 功能分析
利用手指控制ppt实现的功能有:
左翻页,右翻页,开启全屏,退出全屏
系统主要由Python开发,由于它自带的模块较多,所以要根据需求来调用其中对我们开发airppt有用的模块,需要熟悉python中各个模块的作用和用法。
airppt的原理是根据坐标和像素来采集图像信息,然后返回到程序中,通过图像处理工具对采集到的图像进行处理,最后形成动作,来实现airppt的功能.
本设计首先要用到图像处理工具是Opencv,从opencv图形处理模块中引入highgui模块。
HighHGUI只是用来建立快速软件原形或是试验用的。
它的设计意图是为用户提供简单易用的图形用户接口;引入图像模块Image对采集到的图像进行处理,引入os模块提供一个统一的操作系统接口函数;引入时间模块来获取本地时间。
其次要熟悉python的编程方法和获取坐标的原理,以及解决接口问题,这样就需要多看python方面的资料,并且要选择编辑器来进行代码编写。
代码编写要求:
掌握python的基本概念和基本的理论知识;熟练编程工具的使用方法;对程序进行初步的编写和调试。
现在我只是初步实现了airppt的部分功能,接下来还要对它进行调试、整合,扩充它的功能,直至其能实现手动控制ppt。
二、预期效果
通过测试,摄像头可以获取到手指的信息,光标并且会跟随手指的运动而动作,目前还没有实现虚拟点击的效果,而且这个版本的光标动作不太稳定,会在光标附近晃动,所以本设计开发了第二个版本,第二个版本不能显示光标动作的痕迹,但是能控制ppt动作,识别效果不太明显,经分析这与摄像头像素有关。
不过还好,本设计的预期功能基本都实现了。
以后还会增加在新功能,优化已有的功能.下面是程序运行截图,图4—1是执行代码后的截图,图4—2是操作ppt翻页的程序运行截图.
图4-1程序运行截图
图4-2程序执行操作截图
5 结论
在此次毕设中,我学到了很多东西,并且让我疯狂的喜欢上了编程,这段时间感觉的过的特别充实,这几个月比大学四年学的东西都多,当然也有一些值得改进以借鉴的地
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 个人 毕业设计 基于 python 开发 图像