基于Python语言的网络数据挖掘实验指导书_第1页
基于Python语言的网络数据挖掘实验指导书_第2页
基于Python语言的网络数据挖掘实验指导书_第3页
基于Python语言的网络数据挖掘实验指导书_第4页
基于Python语言的网络数据挖掘实验指导书_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《基于Python语言的网络数据挖掘》实验指导书电子科技大学信息与软件工程学院二○一四年6月实验教学目的和规定:实验目的:本课程实验旨在加深学生对于网络大数据挖掘的理解,培养学生分析、设计、实现基于Python语言的网络数据挖掘算法,掌握科学的实验方法,为以后其他专业课的学习打下坚实的基础。该实验内容采用循序渐进的方式,从Python语言的基本语法入手,在加深学生对于Python语言熟悉的基础上突出数据挖掘应用。实验提供功能规定,学生自己拟定设计方案和需要思考如何设计最优化的算法,并完毕结果记录和分析,充足发挥学生的发明性和积极性。实验规定:了解并掌握Python语言的基本语法、可以使用Python读取或写入数据表、获取并分析网络文本数据、获取并解决图像数据等。Python开发环境简介:本课程实验使用的Python开发环境为PythonIDLE,其用户界面图见图1所示。IDLE是开发python程序的基本集成开发环境,具有基本的IDE的功能,是Python教学的不错的选择。当安装好python以后,IDLE就自动安装好了,不需要此外去找。同时,使用Eclipse这个强大的框架时IDLE也可以非常方便的调试Python程序。其基本功能涉及语法加亮、段落缩进、基本文本编辑、TABLE键控制、调试程序。打开Idle后出现一个增强的交互命令行解释器窗口(具有比基本的交互命令提醒符更好的剪切、粘贴、回行等功能)。除此之外,尚有一个针对Python的编辑器(无代码合并,但有语法标签高亮和代码自动完毕功能)、类浏览器和调试器。菜单为TK“剥离”式,也就是点击顶部任意下拉菜单的虚线将会将该菜单提高到它自己的永久窗口中去。特别是"Edit"菜单,将其“靠”在桌面一角非常实用。Idle的调试器提供断点、步进和变量监视功能。图1PythonIDLE界面图实验项目名称及目的规定:实验项目1Python语言的基本语法及简朴应用1、实验目的掌握Python语言的基本语法掌握Python语言中创建模块的方法了解Python语言中定义类及其使用方法学习使用Python语言输出斐波那契数列的方法学习使用Python语言\o"查看:Python面试题:请写出一段Python代码实现删除一个list里面的反复元素"实现删除一个list里面的反复元素的方法2、实验内容1)根据Python基本语法功能设计出实现输出斐波那契数列的方法,并比较不同实现方法的性能。2)根据Python语言中的排序和循环功能,\o"查看:Python面试题:请写出一段Python代码实现删除一个list里面的反复元素"实现删除一个list里面的反复元素3、实验原理设计输出斐波那契数列的Python程序:一方面调用raw_input输入要打印的斐波那契数列的长度,然后把斐波那契数列存储于一个序列当中,并逐个打印序列的元素。此实验部分实现代码如下#通过输入斐波那契数列的长度打印斐波那契数列FibonacciUptoNumer=int(raw_input('PleaseinputaFibonacciSeriesuptoNumber:'))n=FibonacciUptoNumerfibs=[0,1]fornumberinrange(n):fibs.append(fibs[-2]+fibs[-1])设计\o"查看:Python面试题:请写出一段Python代码实现删除一个list里面的反复元素"删除一个list里面的反复元素程序:一方面调用List.sort()对序列进行排序,然后调用last=List[-1]语句从后向前找出反复的元素,并逐个打印非反复的元素。此实验部分实现代码如下ifList:List.sort()last=List[-1]foriinrange(len(List)-2,-1,-1):iflast==List[i]:delList[i]else:last=List[i]printList实验环节1)设计输出斐波那契数列的Python程序分析实验规定逐个打印输出斐波那契数列的元素记录程序代码记录并分析实验结果2)设计程序\o"查看:Python面试题:请写出一段Python代码实现删除一个list里面的反复元素"删除一个list里面的反复元素分析实验规定对list进行排序从后向前查找并删除list中的反复元素记录程序代码记录并分析实验结果实验项目2使用Python读写Excel数据1、实验目的1)强化Python程序的设计和编程能力2)学习两种读取的Excel数据的方法3)学习写入Excel数据的方法4)掌握如何读写其他格式数据的方法5)掌握如何比较不同读写方法的运算性能2、实验内容1)用xlrd模块中的open_workbook实现打开Excel数据表,并设计使用索引和名称两种方法读取Excel数据,最终写入csv文献中。2)用datetime模块中的datetime.now来计算两种不同的读取方法所用CPU时间,从而比较并分析不同算法的性能。3、实验原理1)Python语句读取Excel表数据时,一方面要调用xlrd模块,然后使用语句data=xlrd.open_workbook('excelFile.xls')打开Excel表格。当一个Excel表格中包含多个Sheet时,可以通过索引或者名称顺序获取某一个Sheet中的数据。使用的语句分别为table=data.sheet_by_index(0)和table=data.sheet_by_name(u'Sheet1')。当获取某个Sheet的数据并存储在工作表table后,获取获取整行和整列的值(数组)的语句为table.row_values(i)和table.col_values(i),获取行数和列数的语句为nrows=table.nrows和ncols=table.ncols,循环获取行数据的语句为foriinrange(nrows):printtable.row_values(i)。此实验部分实现代码如下#根据索引获取Excel表格中的数据defexcel_table_byindex(file='abc.xls',colnameindex=0,by_index=0):data=open_excel(file)table=data.sheets()[by_index]nrows=table.nrows#行数colnames=table.row_values(colnameindex)#某一行数据list=[]forrownuminrange(1,nrows):row=table.row_values(rownum)ifrow:app={}foriinrange(len(colnames)):app[colnames[i]]=row[i]list.append(app)returnlistdefexcel_table_byname(file='abc.xls',colnameindex=0,by_name='abc'):data=open_excel(file)table=data.sheet_by_name(by_name)nrows=table.nrows#行数colnames=table.row_values(colnameindex)#某一行数据list=[]forrownuminrange(1,nrows):row=table.row_values(rownum)ifrow:app={}foriinrange(len(colnames)):app[colnames[i]]=row[i]list.append(app)returnlist在该实验中,学生需用前述的Excel数据操作语句实现读取某一个Sheet数据的功能,并在此基础上,思考如何读取其他格式的数据,记录Python代码,并分析实验结果。2)Python语句写入Excel表数据时,一方面要调用pyExcelerator模块,然后使用语句w=Workbook()和ws=w.add_sheet('excelFile.xls')创建一个空白的工作表。在某一个cell写入数据的语句为ws.write(i,j,'string'),而w.save('mini.xls')实现了存储写入后的Excel文献。此实验部分实现代码如下frompyExceleratorimport*w=Workbook()#创建一个工作簿ws=w.add_sheet('test')#创建一个工作表ws.write(0,0,'uestc')#在1行1列写入uestcws.write(0,1,'Sofrware')#在1行2列写入Softwarews.write(1,0,'cs')#在2行1列写入csw.save('mini.xls')#保存至mini.xls文献中在该实验中,学生需用前述的Excel数据操作语句实现写入某一个Sheet数据的功能,并在此基础上,思考如何写入其他格式的数据(如csv格式),记录Python代码,并分析实验结果。3)比较两种不同的读取Excel数据的方法时,需要计算每种方法的运营时间。一方面导入datetime模块,并调用datetime.now()函数,记录某一段代码运营前后的时间点,通过开始和结束的时间点的差值计算出程序运营的时间。此实验部分实现代码如下starttime=datetime.datetime.now()tables=excel_table_byindex()forrowintables:printrowendtime=datetime.datetime.now()printendtime-starttimestarttime=datetime.datetime.now()tables=excel_table_byname()forrowintables:printrowendtime=datetime.datetime.now()printendtime-starttime在该实验中,学生需用前述的CPU时间控制语句实现计算某一段代码的运算时间,并在此基础上,比较并分析两种Excel数据读取方法的性能。记录Python代码,并分析实验结果。实验环节1)设计按名称和按索引读取Excel数据的程序分析实验规定按行打印Excel表中的数据记录程序代码记录并分析实验结果2)设计写入Excel数据的程序分析实验规定按行将数据写入Excel表中记录程序代码记录并分析实验结果3)设计计算程序运营时间的程序分析实验规定记录程序代码比较并分析实验结果总结,撰写实验报告实验项目3使用Python实现网络爬虫算法1、实验目的1)强化Python程序的设计和编程能力2)学习网络爬虫算法的原理3)学习使用Python语言实现网络爬虫算法2、实验内容1)理解网络爬虫算法的原理,并设计使用Python语言获取网页数据的程序。2)用Python语言中的threading和GetUrl模块对网站中URL进行搜集。3、实验原理爬虫算法原理:网络爬虫(又被称为网页蜘蛛,网络机器人,网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。很多搜索引擎都使用爬虫提供最新的数据,搜索引擎运用用户访问过页面的一个副本进行索引,以提供快速的访问。网络爬虫也可以在web上用来自动执行一些任务,例如检查链接,确认html代码;也可以用来抓取网页上某种特定类型信息,例如抓取电子邮件地址。本实验中使用的网络爬虫算法是广度优先搜索(BFS)。广度优先搜索策略是指在抓取过程中,在完毕当前层次的搜索后,才进行下一层次的搜索。有很多研究将广度优先搜索策略应用于聚焦爬虫中。其基本思想是认为与初始URL在一定链接距离内的网页具有主题相关性的概率很大。此外一种应用是将广度优先搜索与网页过滤技术结合使用,先用广度优先策略抓取网页,再将其中无关的网页过滤掉。这些方法的缺陷在于,随着抓取网页的增多,大量的无关网页将被下载并过滤,算法的效率将变低。2)Python语句在某一个网页上获取数据时,一方面要分析网页的HTML源代码,我们以淘宝网页中的商品分类()为例,获取所有一级类别和二级类别的标题。本实验中要调用urllib2和sgmllib.SGMLParser模块,并使用语句content=urllib2.urlopen('网页URL').read()来获取网页的内容。并使用list.feed(content)语句将网页内容存入列表,进行解决。此实验部分实现代码如下classListName1(SGMLParser): def__init__(self): SGMLParser.__init__(self) self.is_h4="" =[] defstart_h4(self,attrs): self.is_h4=1 defend_h4(self): self.is_h4="" defhandle_data(self,text): ifself.is_h4==1: .append(text) classListName2(SGMLParser): def__init__(self): SGMLParser.__init__(self) self.is_h5="" =[] defstart_h5(self,attrs): self.is_h5=1 defend_h5(self): self.is_h5="" defhandle_data(self,text): ifself.is_h5==1: .append(text)content=urllib2.urlopen('').read()listname1=ListName1()listname2=ListName2()listname1.feed(content)listname2.feed(content)在该实验中,学生需用前述的爬虫算法实现语句实现写入读取淘宝网页商品分类标题的功能,并在此基础上,思考如何实现读取其他网页数据的方法,记录Python代码,并分析实验结果。3)在获取网站上的URL时,需要调用GetUrl模块。本实验中通过调用threading模块采用多线程算法实现网站URL的获取。此实验部分实现代码如下defCraw(self,entryUrl):#这是一个深度搜索,到g_toDlUrl为空时结束g_toDlUrl.append(entryUrl)self.logfile.write('>>>Entry:\n')self.logfile.write(entryUrl)depth=0whilelen(g_toDlUrl)!=0anddepth<=self.Maxdepth:depth+=1print'Searchingdepth',depth,'...\n\n'self.downloadAll()self.updateToDl()content='\n>>>Depth'+str(depth)+':\n'self.logfile.write(content)i=0whilei<len(g_toDlUrl):content=str(g_totalcount+i+1)+'->'+g_toDlUrl[i]+'\n'self.logfile.write(content)i+=1classCrawlerThread(threading.Thread):def__init__(self,url,fileName):threading.Thread.__init__(self)self.url=url#本线程下载的urlself.fileName=fileNamedefrun(self):#线程工作-->下载html页面globalg_mutexglobalg_failedUrlglobalg_dledUrltry:f=urllib.urlopen(self.url)s=f.read()fout=file(self.fileName,'w')fout.write(s)fout.close()except:g_mutex.acquire()#线程锁-->锁上g_dledUrl.append(self.url)g_failedUrl.append(self.url)g_mutex.release()#线程锁-->释放print'Faileddownloadingandsaving',self.urlreturnNone#记着返回!g_mutex.acquire()#线程锁-->锁上g_pages.append(s)g_dledUrl.append(self.url)g_mutex.release()#线程锁-->释放在该实验中,学生需用上述网络爬虫算法和多线程控制语句实现获取某一网站所有URL的程序,并在此基础上,比较并分析采用不同线程数时算法的性能。记录Python代码,并分析实验结果。4、实验环节1)设计某一个网页上获取数据的程序分析实验规定打印网页上获取的数据记录程序代码记录并分析实验结果2)设计多线程的获取网站URL的程序分析实验规定打印网站上相关的URL比较不同线程数的算法性能记录程序代码记录并分析实验结果实验项目4使用Python获取社交网络数据1、实验目的1)强化Python程序的设计和编程能力2)学习社交网络OAUTH协议的原理3)学习使用Python语言获取社交网络数据2、实验内容1)理解社交网络OAUTH协议的原理,并学习获取CONSUMER_KEY、CONSUMER_SECRET、USER_TOKEN、USER_SECRET的方法。2)用Python语言中的Json、OS、Linkedin模块对LinkedIn网站中联系人名单进行搜集。3、实验原理1)社交网络OAUTH协议原理:OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。本实验中Linkedin网站的OAUTH协议是采用HMAC-SHA1加密的。开发者需要注册LinkedIn账户,获得CONSUMER_KEY(即APIKey)和CONSUMER_SECRET。KEY跟SECRET的使用方式跟其他一些协议中的公钥私钥的方案相类似,你可以使用你所熟悉的编程语言将KEY和SECRET结合,为你发出的每个请求添加署名,以此来向Linkedin开放平台表白自己身份的合法性。然后根据CONSUMER_KEY和CONSUMER_SECRET获取USER_TOKEN和USER_SECRET。这个环节重要有两个目的:第一,告诉Linkedin将要做什么;第二,告诉Linkedin在callback里要做什么。此外,USER_TOKEN和USER_SECRET可以帮助提供ACCESSTOKEN。实现代码如下:access_token_url=''token=oauth.Token(request_token['oauth_token'],request_token['oauth_token_secret'])token.set_verifier(oauth_verifier)client=oauth.Client(consumer,token)resp,content=client.request(access_token_url,"POST")access_token=dict(urlparse.parse_qsl(content))print"AccessToken:"print"-oauth_token=%s"%access_token['oauth_token']print"-oauth_token_secret=%s"%access_token['oauth_token_secret']printprint"Youmaynowaccessprotectedresourcesusingtheaccesstokensabove."Print在该实验中,学生需用前述的OAUTH协议原理实现获取Linkedin社交网络的ACCESSTOKEN,并在此基础上,思考如何实现读取其他社交网络(如新浪微博)ACCESSTOKEN的方法,记录Python代码,并分析实验结果。2)Python语句获取社交网站用户信息时,一方面要获得ACCESSTOKEN,然后调用os.path.join语句将用户相关信息存储到CSV或者XLS文献中,最后调用PrettyTable模块打印用户信息表。此实验部分实现代码如下#Instantiatethedeveloperauthenticationclassauth=linkedin.LinkedInDeveloperAuthentication(CONSUMER_KEY,CONSUMER_SECRET,USER_TOKEN,USER_SECRET,RETURN_URL,permissions=linkedin.PERMISSIONS.enums.values())#Passitintotheapp...app=linkedin.LinkedInApplication(auth)#Usetheapp...app.get_profile()importjsonimportosconnections=app.get_connections()connections_data=os.path.join("C:/","Users","用户名","Desktop","save.csv")f=open(connections_data,'w')f.write(json.dumps(connections,indent=1))f.close()fromprettytableimportPrettyTable#pipinstallprettytablept=PrettyTable(field_names=['Name','Location'])pt.align='l'[pt.add_row((c['firstName']+''+c['lastName'],c['location']['name']))forcinconnections['values']ifc.has_key('location')]在该实验中,学生需用前述的社交网络信息获取语句实现授权用户的LinkedIn联系人信息,并在此基础上,思考如何实现获取其他社交网络(微博)用户信息的方法,记录Python代码,并分析实验结果。4、实验环节1)设计社交网络授权用户ACCESSTOKEN的程序分析实验规定记录程序代码2)设计社交网络授权用户联系人信息的程序分析实验规定打印授权用户联系人信息导入授权用户联系人的信息记录程序代码记录并分析实验结果实验项目5使用Python记录分析社交网络数据1、实验目的1)强化Python程序的设计和编程能力2)学习社交网络数据清洗和数据记录分析的方法3)学习使用Python语言记录分析社交网络数据2、实验内容1)学习社交网络中联系人职位、公司、年龄等信息的数据清洗和记录分析方法。2)用Python语言中的Counter、itemgetter等模块对LinkedIn网站中联系人名单信息进行初步的记录分析。3、实验原理1)数据清洗:数据清洗是指发现并纠正数据文献中可辨认的错误,涉及检查数据一致性,解决无效值和缺失值等。由于数据仓库中的数据是面向某一主题的数据的集合,这些数据从多个业务系统中抽取而来并且包含历史数据,这样就避免不了有的数据是错误数据、有的数据互相之间有冲突,这些错误的或有冲突的数据显然是我们不想要的,称为“脏数据”。我们要按照一定的规则把脏数据清除,这就是数据清洗。而数据清洗的任务是过滤那些不符合规定的数据,将过滤的结果交给业务主管部门,确认是否过滤掉还是由业务单位修正之后再进行抽取。不符合规定的数据重要是有不完整的数据、错误的数据、反复的数据三大类。本实验中使用的数据来源是Linkedin网站中联系人信息,需要清洗的数据重要是由于数据名称不统一导致的。例如,联系人公司中很多都带有后缀Inc.,Co.等,联系人职位中很多带有Prof.,Dr.等,这些信息在记录时会有干扰作用。例如IBMInc.和IBM代表的都是IBM公司,但程序在进行记录分析时会误认为是两个不同的公司。实现代码如下:transforms=[(',Inc.',''),(',Inc',''),(',LLC',''),(',LLP',''),('LLC',''),('Inc.',''),('Inc','')]csvReader=csv.DictReader(open(CSV_FILE),delimiter=',',quotechar='"')contacts=[rowforrowincsvReader]companies=[c['Company'].strip()forcincontactsifc['Company'].strip()!='']fori,_inenumerate(companies):fortransformintransforms:companies[i]=companies[i].replace(*transform)在该实验中,学生需用前述的数据清洗方法实现对Linkedin社交网络联系人信息进行数据清洗,并在此基础上,思考如何实现清洗其他社交网络(如新浪微博)联系人信息的方法,记录Python代码,并分析实验结果。2)Python语句分析清洗后的社交网站联系人信息时,一方面要调用Counter模块语句将联系人相关信息进行记录,并调用PrettyTable模块将联系人信息存储在表中,最后调用print语句按照降序打印用户信息表。此实验部分实现代码如下pt=PrettyTable(field_names=['Company','Freq'])pt.align='c'c=Counter(companies)[pt.add_row([company,freq])for(company,freq)insorted(c.items(),key=itemgetter(1),reverse=True)iffreq>0]printpttitles=[c['JobTitle'].strip()forcincontactsifc['JobTitle'].strip()!='']fori,_inenumerate(titles):fortransformintransforms:titles[i]=titles[i].replace(*transform)pt2=PrettyTable(field_names=['JobTitle','Freq'])pt2.align='c'c=Counter(titles)[pt2.add_row([title,freq])for(title,freq)insorted(c.items(),key=itemgetter(1),reverse=True)iffreq>0]在该实验中,学生需用前述的记录分析方法分析LinkedIn联系人信息,并在此基础上,思考如何实现分析其他社交网络(微博)联系人信息的方法,记录Python代码,并分析实验结果。4、实验环节1)设计社交网络数据清楚的程序分析实验规定清洗网络中的脏数据记录程序代码2)设计记录分析社交网络联系人信息的程序分析实验规定记录并打印联系人列表中的信息数据记录程序代码记录并分析实验结果实验项目6使用Python大批量获取网络图片数据1、实验目的1)强化Python程序的设计和编程能力2)了解大批量获取网络图片的原理3)学习使用Python语言批量获取网络图片2、实验内容1)了解大批量获取网络图片的原理,并掌握批量获取网络图片的方法。2)用Python语言中的urllib、urllib2等模块对图虫网站中的图片进行批量下载,并存储在指定的文献夹中。3、实验原理1)批量获取网络图片的方法:批量获取网络图片的方法是通过解析网页的HTML文献,运用正则表达式把源代码中的图片地址过滤出来,从而根据过滤出来的图片地址下载网络图片。具体来说,批量获取网络图片的方法分为三种,一是用微软提供的扩展库win32com来操作IE,二是用selenium的webdriver,三是用python自带的HTMLParser解析。win32com可以获得类似js里面的document对象,但文献是只读的。selenium则提供了对Chrome,IE,FireFox等浏览器的支持,每种浏览器都有execute_script和find_element_by_xx方法,可以方便的执行js脚本(涉及修改元素)和读取html里面的元素。局限性是selenium只提供对python2.6和2.7的支持。HTMLParser则是需要自己写个类继承基类,重写解析元素的方法。2)本实验中使用的批量获取网络图片的方法,属于第三种方法。一方面通过urllib2.urlopen(url).read().decode('utf-8')语句解析HTML文献,再使用re.findall将把源代码中的图片地址过滤出来,最后使用urllib.urlretrieve(imgurl,target)语句将图片下载到指定途径的文献夹中。实现代码如下:#获取二级页面urldeffindUrl2(html):re1=r'\d+/\d+/|http://\w+(?<!photos)./\d+/'url2list=re.findall(re1,html)url2lstfltr=list(set(url2list))url2lstfltr.sort(key=url2list.index)#printurl2lstfltrreturnurl2lstfltr#获取html文本defgetHtml(url):html=urllib2.urlopen(url).read().decode('utf-8')#解码为utf-8returnhtml#下载图片到本地defdownload(html_page,pageNo):#定义文献夹的名字x=time.localtime(time.time())foldername=str(x.__getattribute__("tm_year"))+"-"+str(x.__getattribute__("tm_mon"))+"-"+str(x.__getattribute__("tm_mday"))re2=r'+/f/.+\.jpg'imglist=re.findall(re2,html_page)printimglistdownload_img=Noneforimgurlinimglist:picpath='C:\\Users\\peterlindi\\Desktop\\lindi\\%s\\%s'%(foldername,str(pageNo))filename=str(uuid.uuid1())ifnotos.path.exists(picpath):os.makedirs(picpath)target=picpath+"\\%s.jpg"%filenameprint"Thephotoslocationis:"+targetdownload_img=urllib.urlretrieve(imgurl,target)time.sleep(1)print(imgurl)returndownload_img在该实验中,学生需用前述的批量网络图片获取方法实现对图虫网制定页面图片进行批量下载,并在此基础上,思考如何实现批量下载其他图库的方法,记录Python代码,并分析实验结果。4、实验环节设计批量获取图片的程序分析实验规定批量获取并存储网络图片记录程序代码记录并分析实验结果实验项目7使用Python解决图片尺寸和角度1、实验目的1)强化Python程序的设计和编程能力2)学习图片的像素矩阵表达方法3)学习使用Python语言调整图像尺寸和角度2、实验内容1)学习使用像素矩阵表达图片的方法。2)用Python语言中的Image等模块对图片尺寸、角度等进行解决的方法。3、实验原理1)图片的像素矩阵表达:数字图像数据可以用矩阵来表达,因此可以采用矩阵理论和矩阵算法对数字图像进行分析和解决。最典型的例子是灰度图像。灰度图像的像素数据就是一个矩阵,矩阵的行相应图像的高(单位为像素),矩阵的列相应图像的宽(单位为像素),矩阵的元素相应图像的像素,矩阵元素的值就是像素的灰度值。在计算机数字图像解决程序中,通常用二维数组来存放图像数据。二维数组的行相应图像的高,二维数组的列相应图像的宽,二维数组的元素相应图像的像素,二维数组元素的值就是像素的灰度值。采用二维数组来存储数字图像,符合二维图像的行列特性,同时也便于程序的寻址操作,使得计算机图像编程十分方便。图像的位图数据是一个二维数组(矩阵),矩阵的每一个元素相应了图像的一个像素,当保存一幅图像时,不仅要保存图像的位图数据矩阵,还要将每个像素的颜色保存下来,颜色的记录是运用颜色表来完毕的。颜色表,也叫颜色查找表,是图像像素数据的颜色索引表。以一个4色位图为例,则其颜色表有4个表项,表中每一行记录一种颜色的R、G、B值,这样,当表达一个像素的颜色时,只需要指出该颜色在第几行,即该颜色在表中的索引值即可。2)Python语句调整图片的尺寸和角度时,一方面要调用Image模块中的im=Image.open("xxx.jpg")语句打开指定的预解决图片,并调用im.size和im.resize记录并调整图片的尺寸,调用im.rotate语句调整图片的角度,最后调用im.convert实现图片格式的转换。此实验部分实现代码如下importImageim=Image.open("messi.jpg")printim.sizewidth=200ratio=float(width)/im.size[0]height=int(im.size[1]*ratio)nim1=im.resize((width,height),Image.BILINEAR)printnim1.sizenim1.save("resize.jpg")nim2=im.rotate(45,Image.BILINEAR)nim2.save("rotated45.jpg")nim3=im.rotate(90,Image.BILINEAR)nim3.save("rotated90.jpg")gray_img=im.convert("L")gray_img2=gray_img.resize((128,128),Image.BILINEAR)printgray_img2.histogram()在该实验中,学生需用前述的图片解决方法对指定图片的尺寸和角度进行调整,并在此基础上,思考如何实现调整其他图片参数的方法,记录Python代码,并分析实验结果。4、实验环节设计图片解决方法的程序分析实验规定实现指定图片的尺寸和角度进行调整记录程序代码记录并分析实验结果实验项目8使用Python解决图片亮度、对比度和饱和度1、实验目的1)强化Python程序的设计和编程能力2)学习图像的亮度、对比度和饱和度等参数的表达方法3)学习使用Python语言调整图像亮度、对比度和饱和度2、实验内容1)学习图像的亮度、对比度和饱和度等参数的表达方法。2)用Python语言中的Image、ImageDraw、ImageEnhance等模块对图片亮度、对比度和饱和度等进行解决的方法。3、实验原理1)图像的重要指标参数:在图像解决中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论