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

下载本文档

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

文档简介

基于Python语言的网络数据挖掘实验指导书电子科技大学信息与软件工程学院二一四年6月一、 实验教学目的和要求:实验目的:本课程实验旨在加深学生对于网络大数据挖掘的理解,培养学生分析、设计、实现基于Python语言的网络数据挖掘算法,掌握科学的实验方法,为以后其他专业课的学习打下坚实的基础。该实验内容采用循序渐进的方式,从Python语言的基本语法入手,在加深学生对于Python语言熟悉的基础上突出数据挖掘应用。实验提供功能要求,学生自己确定设计方案和需要思考如何设计最优化的算法,并完成结果记录和分析,充分发挥学生的创造性和主动性。实验要求:了解并掌握Python语言的基本语法、能够使用Python读取或写入数据表、获取并分析网络文本数据、获取并处理图像数据等。二、 Python开发环境简介:本课程实验使用的Python开发环境为Python IDLE,其用户界面图见图1所示。IDLE是开发python程序的基本集成开发环境,具备基本的IDE的功能,是Python教学的不错的选择。当安装好python以后,IDLE就自动安装好了,不需要另外去找。同时,使用Eclipse这个强大的框架时IDLE也可以非常方便的调试Python程序。其基本功能包括语法加亮、段落缩进、基本文本编辑、TABLE键控制、调试程序。打开 Idle 后出现一个增强的交互命令行解释器窗口(具有比基本的交互命令提示符更好的剪切、粘贴、回行等功能)。除此之外,还有一个针对 Python 的编辑器(无代码合并,但有语法标签高亮和代码自动完成功能)、类浏览器和调试器。菜单为 TK “剥离”式,也就是点击顶部任意下拉菜单的虚线将会将该菜单提升到它自己的永久窗口中去。特别是 Edit 菜单,将其“靠”在桌面一角非常实用。Idle 的调试器提供断点、步进和变量监视功能。图1 Python IDLE界面图三、 实验项目名称及目的要求:实验项目1 Python语言的基本语法及简单应用1、实验目的1) 掌握Python语言的基本语法2) 掌握Python语言中创建模块的方法3) 了解Python语言中定义类及其使用方法4) 学习使用Python语言输出斐波那契数列的方法5) 学习使用Python语言实现删除一个list里面的重复元素的方法2、实验内容1)根据Python基本语法功能设计出实现输出斐波那契数列的方法,并比较不同实现方法的性能。2)根据Python语言中的排序和循环功能,实现删除一个list里面的重复元素3、实验原理1) 设计输出斐波那契数列的Python程序:首先调用raw_input输入要打印的斐波那契数列的长度,然后把斐波那契数列存储于一个序列当中,并逐个打印序列的元素。此实验部分实现代码如下#通过输入斐波那契数列的长度打印斐波那契数列 FibonacciUptoNumer = int(raw_input(Please input a Fibonacci Series up to Number : )n = FibonacciUptoNumerfibs = 0, 1for number in range(n): fibs.append(fibs-2 + fibs-1)2) 设计删除一个list里面的重复元素程序:首先调用List.sort()对序列进行排序,然后调用last = List-1语句从后向前找出重复的元素,并逐个打印非重复的元素。此实验部分实现代码如下if List:List.sort()last = List-1for i in range(len(List)-2, -1, -1): if last=Listi: del Listi else: last=Listiprint List4、 实验步骤1)设计输出斐波那契数列的Python程序l 分析实验要求l 逐个打印输出斐波那契数列的元素l 记录程序代码l 记录并分析实验结果2)设计程序删除一个list里面的重复元素l 分析实验要求l 对list进行排序l 从后向前查找并删除list中的重复元素l 记录程序代码l 记录并分析实验结果实验项目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(uSheet1)。当获取某个Sheet的数据并存储在工作表table后,获取获取整行和整列的值(数组)的语句为table.row_values(i)和table.col_values(i),获取行数和列数的语句为nrows = table.nrows和ncols = table.ncols,循环获取行数据的语句为for i in range(nrows): print table.row_values(i)。此实验部分实现代码如下#根据索引获取Excel表格中的数据def excel_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 = for rownum in range(1,nrows): row = table.row_values(rownum) if row: app = for i in range(len(colnames): appcolnamesi = rowi list.append(app) return listdef excel_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 = for rownum in range(1,nrows): row = table.row_values(rownum) if row: app = for i in range(len(colnames): appcolnamesi = rowi list.append(app) return list在该实验中,学生需用前述的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文件。此实验部分实现代码如下from pyExcelerator import *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()for row in tables: print rowendtime = datetime.datetime.now()print endtime - starttime starttime = datetime.datetime.now()tables = excel_table_byname()for row in tables: print rowendtime = datetime.datetime.now()print endtime - starttime在该实验中,学生需用前述的CPU时间控制语句实现计算某一段代码的运算时间,并在此基础上,比较并分析两种Excel数据读取方法的性能。记录Python代码,并分析实验结果。4、 实验步骤1)设计按名称和按索引读取Excel数据的程序l 分析实验要求l 按行打印Excel表中的数据l 记录程序代码l 记录并分析实验结果2)设计写入Excel数据的程序l 分析实验要求l 按行将数据写入Excel表中l 记录程序代码l 记录并分析实验结果3)设计计算程序运行时间的程序l 分析实验要求l 记录程序代码l 比较并分析实验结果l 总结,撰写实验报告实验项目3 使用Python实现网络爬虫算法1、实验目的1)强化Python程序的设计和编程能力2)学习网络爬虫算法的原理3)学习使用Python语言实现网络爬虫算法2、实验内容1)理解网络爬虫算法的原理,并设计使用Python语言获取网页数据的程序。2)用Python语言中的threading和GetUrl模块对网站中URL进行搜集。3、实验原理1) 爬虫算法原理:网络爬虫(又被称为网页蜘蛛,网络机器人,网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。很多搜索引擎都使用爬虫提供最新的数据,搜索引擎利用用户访问过页面的一个副本进行索引,以提供快速的访问。网络爬虫也可以在web上用来自动执行一些任务,例如检查链接,确认html代码;也可以用来抓取网页上某种特定类型信息,例如抓取电子邮件地址。本实验中使用的网络爬虫算法是广度优先搜索(BFS)。广度优先搜索策略是指在抓取过程中,在完成当前层次的搜索后,才进行下一层次的搜索。有很多研究将广度优先搜索策略应用于聚焦爬虫中。其基本思想是认为与初始URL在一定链接距离内的网页具有主题相关性的概率很大。另外一种应用是将广度优先搜索与网页过滤技术结合使用,先用广度优先策略抓取网页,再将其中无关的网页过滤掉。这些方法的缺点在于,随着抓取网页的增多,大量的无关网页将被下载并过滤,算法的效率将变低。2)Python语句在某一个网页上获取数据时,首先要分析网页的HTML源代码,我们以淘宝网页中的商品分类(/browse/cat-0.htm)为例,获取所有一级类别和二级类别的标题。本实验中要调用urllib2和sgmllib.SGMLParser模块,并使用语句content = urllib2.urlopen(网页URL).read()来获取网页的内容。并使用list.feed(content)语句将网页内容存入列表,进行处理。此实验部分实现代码如下class ListName1(SGMLParser):def _init_(self):SGMLParser._init_(self)self.is_h4 = = def start_h4(self, attrs):self.is_h4 = 1def end_h4(self):self.is_h4 = def handle_data(self, text):if self.is_h4 = 1:.append(text)class ListName2(SGMLParser):def _init_(self):SGMLParser._init_(self)self.is_h5 = = def start_h5(self, attrs):self.is_h5 = 1def end_h5(self):self.is_h5 = def handle_data(self, text):if self.is_h5 = 1:.append(text)content = urllib2.urlopen(/browse/cat-0.htm).read()listname1 = ListName1()listname2 = ListName2()listname1.feed(content)listname2.feed(content)在该实验中,学生需用前述的爬虫算法实现语句实现写入读取淘宝网页商品分类标题的功能,并在此基础上,思考如何实现读取其他网页数据的方法,记录Python代码,并分析实验结果。3)在获取网站上的URL时,需要调用GetUrl模块。本实验中通过调用threading 模块采用多线程算法实现网站URL的获取。此实验部分实现代码如下def Craw(self,entryUrl): #这是一个深度搜索,到g_toDlUrl为空时结束 g_toDlUrl.append(entryUrl) self.logfile.write(Entry:n) self.logfile.write(entryUrl) depth = 0 while len(g_toDlUrl) != 0 and depth Depth + str(depth)+:n self.logfile.write(content) i = 0 while i + g_toDlUrli + n self.logfile.write(content) i += 1 class CrawlerThread(threading.Thread): def _init_(self, url, fileName): threading.Thread._init_(self) self.url = url #本线程下载的url self.fileName = fileName def run(self): #线程工作-下载html页面 global g_mutex global g_failedUrl global g_dledUrl try: 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 Failed downloading and saving,self.url return None #记着返回! g_mutex.acquire() #线程锁-锁上 g_pages.append(s) g_dledUrl.append(self.url) g_mutex.release() #线程锁-释放在该实验中,学生需用上述网络爬虫算法和多线程控制语句实现获取某一网站所有URL的程序,并在此基础上,比较并分析采用不同线程数时算法的性能。记录Python代码,并分析实验结果。4、实验步骤1)设计某一个网页上获取数据的程序l 分析实验要求l 打印网页上获取的数据l 记录程序代码l 记录并分析实验结果2)设计多线程的获取网站URL的程序l 分析实验要求l 打印网站上相关的URLl 比较不同线程数的算法性能l 记录程序代码l 记录并分析实验结果实验项目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(即API Key) 和CONSUMER_SECRET。KEY跟SECRET的使用方式跟其他一些协议中的公钥私钥的方案相类似,你可以使用你所熟悉的编程语言将KEY和SECRET结合,为你发出的每个请求添加签名,以此来向Linkedin开放平台表明自己身份的合法性。然后根据CONSUMER_KEY和CONSUMER_SECRET获取USER_TOKEN和USER_SECRET。这个步骤主要有两个目的:第一,告诉Linkedin将要做什么;第二,告诉Linkedin在callback里要做什么。此外,USER_TOKEN和USER_SECRET可以帮助提供ACCESS TOKEN。实现代码如下:access_token_url = /uas/oauth/accessTokentoken=oauth.Token(request_tokenoauth_token, request_tokenoauth_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 Access Token:print - oauth_token = %s % access_tokenoauth_tokenprint - oauth_token_secret = %s % access_tokenoauth_token_secretprintprint You may now access protected resources using the access tokens above.Print在该实验中,学生需用前述的OAUTH协议原理实现获取Linkedin社交网络的ACCESS TOKEN,并在此基础上,思考如何实现读取其他社交网络(如新浪微博)ACCESS TOKEN的方法,记录Python代码,并分析实验结果。2)Python语句获取社交网站用户信息时,首先要获得ACCESS TOKEN,然后调用os.path.join语句将用户相关信息存储到CSV或者XLS文件中,最后调用PrettyTable模块打印用户信息表。此实验部分实现代码如下# Instantiate the developer authentication classauth=linkedin.LinkedInDeveloperAuthentication(CONSUMER_KEY, CONSUMER_SECRET, USER_TOKEN, USER_SECRET, RETURN_URL, permissions=linkedin.PERMISSIONS.enums.values()# Pass it in to the app.app = linkedin.LinkedInApplication(auth)# Use the app.app.get_profile()import jsonimport osconnections = 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()from prettytable import PrettyTable # pip install prettytablept = PrettyTable(field_names=Name, Location)pt.align = l pt.add_row(cfirstName + + clastName, clocationname) for c in connectionsvalues if c.has_key(location)在该实验中,学生需用前述的社交网络信息获取语句实现授权用户的LinkedIn联系人信息,并在此基础上,思考如何实现获取其他社交网络(微博)用户信息的方法,记录Python代码,并分析实验结果。4、实验步骤1)设计社交网络授权用户ACCESS TOKEN的程序l 分析实验要求l 记录程序代码2)设计社交网络授权用户联系人信息的程序l 分析实验要求l 打印授权用户联系人信息l 导入授权用户联系人的信息l 记录程序代码l 记录并分析实验结果实验项目5 使用Python统计分析社交网络数据1、实验目的1)强化Python程序的设计和编程能力2)学习社交网络数据清洗和数据统计分析的方法3)学习使用Python语言统计分析社交网络数据2、实验内容1)学习社交网络中联系人职位、公司、年龄等信息的数据清洗和统计分析方法。2)用Python语言中的Counter、itemgetter等模块对LinkedIn网站中联系人名单信息进行初步的统计分析。3、实验原理1)数据清洗:数据清洗是指发现并纠正数据文件中可识别的错误,包括检查数据一致性,处理无效值和缺失值等。由于数据仓库中的数据是面向某一主题的数据的集合,这些数据从多个业务系统中抽取而来而且包含历史数据,这样就避免不了有的数据是错误数据、有的数据相互之间有冲突,这些错误的或有冲突的数据显然是我们不想要的,称为“脏数据”。我们要按照一定的规则把脏数据清除,这就是数据清洗。而数据清洗的任务是过滤那些不符合要求的数据,将过滤的结果交给业务主管部门,确认是否过滤掉还是由业务单位修正之后再进行抽取。不符合要求的数据主要是有不完整的数据、错误的数据、重复的数据三大类。本实验中使用的数据来源是Linkedin网站中联系人信息,需要清洗的数据主要是由于数据名称不统一造成的。例如,联系人公司中很多都带有后缀Inc.,Co.等,联系人职位中很多带有Prof., Dr.等,这些信息在统计时会有干扰作用。例如IBM Inc.和IBM代表的都是IBM公司,但程序在进行统计分析时会误认为是两个不同的公司。实现代码如下:transforms = (, Inc., ), (, Inc, ), (, LLC, ), (, LLP, ), ( LLC, ), ( Inc., ), ( Inc, )csvReader = csv.DictReader(open(CSV_FILE), delimiter=, quotechar=)contacts = row for row in csvReadercompanies = cCompany.strip() for c in contacts if cCompany.strip() != for i, _ in enumerate(companies): for transform in transforms: companiesi = companiesi.replace(*transform)在该实验中,学生需用前述的数据清洗方法实现对Linkedin社交网络联系人信息进行数据清洗,并在此基础上,思考如何实现清洗其他社交网络(如新浪微博)联系人信息的方法,记录Python代码,并分析实验结果。2)Python语句分析清洗后的社交网站联系人信息时,首先要调用Counter模块语句将联系人相关信息进行统计,并调用PrettyTable模块将联系人信息存储在表中,最后调用print语句按照降序打印用户信息表。此实验部分实现代码如下pt = PrettyTable(field_names=Company, Freq)pt.align = cc = Counter(companies)pt.add_row(company, freq)for (company, freq) in sorted(c.items(), key=itemgetter(1), reverse=True) if freq 0print pttitles = cJob Title.strip() for c in contacts if cJob Title.strip() != for i, _ in enumerate(titles): for transform in transforms: titlesi = titlesi.replace(*transform)pt2 = PrettyTable(field_names=Job Title, Freq)pt2.align = cc = Counter(titles)pt2.add_row(title, freq)for (title, freq) in sorted(c.items(), key=itemgetter(1), reverse=True) if freq 0在该实验中,学生需用前述的统计分析方法分析LinkedIn联系人信息,并在此基础上,思考如何实现分析其他社交网络(微博)联系人信息的方法,记录Python代码,并分析实验结果。4、实验步骤1)设计社交网络数据清晰的程序l 分析实验要求l 清洗网络中的脏数据l 记录程序代码2)设计统计分析社交网络联系人信息的程序l 分析实验要求l 统计并打印联系人列表中的信息数据l 记录程序代码l 记录并分析实验结果实验项目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)语句将图片下载到指定路径的文件夹中。实现代码如下:#获取二级页面urldef findUrl2(html): re1 = r/d+/d+/|http:/w+(?!photos)./d+/ url2list = re.findall(re1,html) url2lstfltr = list(set(url2list) url2lstfltr.sort(key=url2list.index) #print url2lstfltr return url2lstfltr#获取html文本def getHtml(url): html = urllib2.urlopen(url).read().decode(utf-8)#解码为utf-8 return html#下载图片到本地def download(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) print imglist download_img=None for imgurl in imglist:picpath=C:UserspeterlindiDesktoplindi%s%s%(foldername,str(pageNo) filename = str(uuid.uuid1() if not os.path.exists(picpath): os.makedirs(picpath) target = picpath+%s.jpg % filename print The photos location is:+target download_img = urllib.urlretrieve(imgurl, target) time.sleep(1) print(imgurl) return download_img在该实验中,学生需用前述的批量网络图片获取方法实现对图虫网制定页面图片进行批量下载,并在此基础上,思考如何实现批量下载其他图库的方法,记录Python代码,并分析实验结果。4、实验步骤设计批量获取图片的程序l 分析实验要求l 批量获取并存储网络图片l 记录程序代码l 记录并分析实验结果实验项目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实现图片格式的转换。此实验部分实现代码如下import Imageim = Image.open( messi.jpg )print im.sizewidth = 200ratio = float(width)/im.size0height = int(im.size1*ratio)nim1 = im.resize( (width, height), Image.BILINEAR )print nim1.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)print gray_img2.histogram()在该实验中,学生需用前述的图片处理方法对指定图片的尺寸和角度进行调整,并在此基础上,思考如何实现调整其他图片参数的方法,记录Python代码,并分析实验结果。4、实验步骤设计图片处理方法的程序l 分析实验要求l 实现指定图片的尺寸和角度进行调整l 记录程序代码l 记录并分析实验结果实验项目8 使用Python处理图片亮度、对比度和饱和度1、实验目的1)强化Python程序的设计和编程能力2)学习图像的亮度、对比度和饱和度等参数的表示方法3)学习使用Python语言调整图像亮度、对比度和饱和度2、实验内容1)学习图像的亮度、对比度和饱和度等参数的表示方法。2)用Python语言中的Image、ImageDraw、ImageEnhance等模块对图片亮度、对比度和饱和度等进行处理的方法。3、实验原理1)图像的主要指标参数:在图像处理中,图像的主要指标参数包括亮度、对比度、饱和度等。亮度是指图片的明亮程度,计算亮度的基准是灰度测试卡。黑色为0,白色为10,在010之间等间隔的排列为9个阶段。色彩可以分为有彩色和无彩色,但后者仍然存在着亮度。作为有彩色,每种色各自的亮度在灰度测试卡上都具有相应的位置值。彩度高的色对亮度有很大的影响,不太容

温馨提示

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

评论

0/150

提交评论