手写数字识别系统编程技巧
来源:互联网 发布:淘宝客怎么关闭掉 编辑:程序博客网 时间:2024/06/18 11:18
手写数字识别系统编程技巧
之前,我写过一篇文章Python实现手写识别系统http://blog.csdn.net/louishao/article/details/60867339。这个实际上是我最近完成的本科毕业论文的课题。
本文就在那篇文章的基础上,总结当中的编程技巧,主要是图像处理和tkinter的编程。注意:本文写的编程技巧,仅针对之前的文章而言,并非是系统的讲解!
1 图像处理编程技巧
手写数字的预处理,我设计的系统中,包含了整形,灰度化和像素值的归一化。当然,我的论文课题重点不是图像处理,因此,这里我基本用的python第三方库PIL实现的。
整形、灰度化、像素值归一化的编程实现
# reshapedef reshapepic(pic): im = Image.open(pic) if im.size!=(28,28): im = im.resize((28,28))#,Image.ANTIALIAS) return im# grayingdef graypic(pic): if pic.mode!='L': pic = pic.convert('L') return pic# normalizationdef normalizepic(pic): im_arr = list(pic.getdata()) im_nparr = [] for x in im_arr: x=1-x/255 im_nparr.append(x) im_nparr = np.array([im_nparr]) return im_nparr,pic
**说明:**mnist中的图像都是28×28的,因此,使用reshapepic()将输入的图片整形为28×28的;同时训练图像是黑白的,因此,使用gray()进行灰度化;而且,训练图像的像素值都是在0-1之间的,因此需要归一化。
2 tkinter编程技巧
我本身对tkinter懂得不多,也只是懂一些很基础的编程,但通过之前手写识别系统的GUI实现后,自己学习了很多,现在作个总结。
很基础的构建控件,添加命令,我这里没有提及,主要是写一些,实用的技巧。
2.1 tkinter中的menu
我实现的系统中,含有’OpenFile’的菜单。实现如下:(这里是从我的整个项目文件上截取的,我采用面向对象的写法)
# ------Menu--------------------self.menubar = Menu(self.root)self.root.config(menu=self.menubar)self.menubar.add_command(label='OpenFile',command=self.openfile)self.piccan = Canvas(self.numberrec, width=168,height=168,bg='#f2f2f2')self.root['menu']=self.menubarself.piccan.grid(row=2,column=0,rowspan=3)
打开图片后,使用一个Canvas来显示图片
# ------ Menu function --------------------------------------def openfile(self): try: fname = td.askopenfilename(title="open", filetypes=[('Image','*.png'),('Image','*.bmp'), ('All Files', '*')]) self.imagepath.set(fname) self.showimage() #del(self.im_nparr) self.reshbutton['state']='normal' except AttributeError: tb.showwarning('Warining',"You haven't import any images!") except IOError: tb.showwarning('Warining',"You should import an image!")# ------- function to show image ------------------------------def showimage(self): self.__img = Image.open(self.imagepath.get()) #print(self.__img) self.__photo = ImageTk.PhotoImage(self.__img) self.piccan.create_image((84,84),image=self.__photo)
最后实现的结果,就是在菜单上导入图片,可以在一个Canvas的中间位置显示。
2.2 tkinter中的scrolledtext编程技巧
scrolledtext是将滚动轴和文本控件结合在一起,这样,使用起来更方便。
我的系统使用scrolledtext是用于显示各种信息的,类似很多集成系统的Console框的使用。
功能实现:
self.trainmsg = ScrolledText(self.train,font=("Microsoft YaHei",10),width=40,height=15,padx=5,pady=5)self.trainmsg.grid(column=0,row=0,padx=5,pady=5)
这样,就能设置显示文本的字体和大小,以及这个控件的长和宽。
编写在ScrolledText中显示文本的函数,如下:
self.message = StringVar(self.root)def printt(self,msg): self.message.set(msg+"\n") self.trainmsg.insert(INSERT,self.message.get()) self.trainmsg.see(END)
ScrolledText的使用关键在于printt()的函数上。insert()是用于插入要显示的文本,see(END)是当显示内容超过文本框的时候,自动滑到最下方。
2.3 tkinter中的Canvas编程技巧
对于Canvas控件,有一个方法很使用,就是delete(“all”),它能清空当前Canvas显示的图像,一定程度上能起到刷新的作用。
总结:做整个项目之前,我自己基本上都不知道怎么实现界面。但是,自己不断地尝试,写了很多很多的测试文件,自己也查了很多资料,但是网上tkinter的资料比较少,而且很多都只是很基础的教程,所以我还看了一部分的tkinter官方文档。总的来说,用了一个月写界面,学了很多,自己之前写过MATLAB的GUI,现在有写了python的,感觉自己对GUI的编程有一点小心得,也对编程有了信心。最终把自己既定的功能都写出来了,也很有满足感,继续努力!
- 手写数字识别系统编程技巧
- 手写数字识别系统之倾斜矫正
- 机器学习--knn手写数字识别系统
- 手写数字识别实验
- 手写数字识别
- 识别手写数字
- CNN 手写数字识别
- SVM - 手写数字识别
- caffe识别手写数字
- KNN手写数字识别
- 手写数字识别实现
- SVM手写数字识别
- tensorflow识别手写数字
- 手写数字识别
- MNIST手写数字识别
- 识别手写数字
- 摄像头识别手写数字
- 手写数字识别
- noi-8175-将字符串中的小写字母转换成大写字母
- 下载网页视频
- jQuery的加法运算
- MyBatis参数传入集合之foreach动态sql
- ThinkPHP5 select出来的结果是个对象?居然还可以以数组形式访问数据?
- 手写数字识别系统编程技巧
- “谈一谈网络编程学习经验“总结
- MySQL简单实例
- 【Unity优化】为C#定制联合(Union)提高序列化速度
- hadoop自定义分区
- Codeforces 688E The Values You Can Make【Dp】
- springmvc知识点总结
- Android 性能优化之布局优化
- ruby语法条件语句实例