目录

  • 1 程序设计基本方法
    • 1.1 程序设计语言
    • 1.2 Python语言开发环境配置
    • 1.3 实验教学 python环境配置
    • 1.4 第1章PPT
  • 2 Python程序实例解析
    • 2.1 Python程序语法元素分析
    • 2.2 Python蟒蛇绘制
    • 2.3 实验教学 python蟒蛇程序
    • 2.4 第2章PPT
  • 3 基本数据类型
    • 3.1 数字类型及操作
    • 3.2 字符类型及操作
    • 3.3 实验教学 天天向上的力量
    • 3.4 第3章PPT
  • 4 程序的控制结构
    • 4.1 分支结构
    • 4.2 循环结构
    • 4.3 实验教学 身体质量指数
    • 4.4 第4章PPT
  • 5 函数和代码复用
    • 5.1 函数及应用
    • 5.2 递归及应用
    • 5.3 实验教学 七段数码管
    • 5.4 第5章PPT
  • 6 组合数据类型
    • 6.1 序列类型及应用
    • 6.2 字典类型及应用
    • 6.3 实验教学 基本统计及词频统计
    • 6.4 第6章PPT
  • 7 文件和数据格式化
    • 7.1 文件的使用
    • 7.2 图像的处理
    • 7.3 实验教学 图像处理
    • 7.4 第7章PPT
  • 8 程序设计方法论
    • 8.1 计算思维
    • 8.2 计算生态
    • 8.3 实验教学 第三方库的安装
    • 8.4 第8章PPT
实验教学 图像处理

                     图像处理—Image

ImagePIL中的核心类,有很多种方式来对它进行初始化,比如从文件中加载一张图像,处理其他形式的图像,或者是从头创造一张图像等。下面是PIL Image类中常用的方法:

open(filename,mode)(打开一张图像)。下面的代码演示了如何从文件打开一张图像:

>>> from PIL import Image
>>> Image.open("dog.jpg","r")
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=296x299 at 0x7F62BDB5B0F0>
>>> im = Image.open("dog.jpg","r")
>>> print(im.size,im.format,im.mode)
(296, 299) JPEG RGB

Image.open返回一个Image对象,该对象有size,format,mode等属性,其中size表示图像的宽度和高度(像素表示);format表示图像的格式,常见的包括JPEG,PNG等格式;mode表示图像的模式,定义了像素类型还有图像深度等,常见的有RGB,HSV等。一般来说'L'(luminance)表示灰度图像,'RGB'表示真彩图像,'CMYK'表示预先压缩的图像。一旦得到了打开的Image对象之后,就可以使用其众多的方法对图像进行处理了,比如使用im.show()可以展示上面得到的图像。

save(filename,format)(保存指定格式的图像)

>>> im.save("dog.png",'png')

上面的代码将图像重新保存成png格式。

thumbnail(size,resample)(创建缩略图)

>>> im.thumbnail((50,50),resample=Image.BICUBIC)

>>> im.show()

上面的代码可以创建一个指定大小(size)的缩略图,需要注意的是,thumbnail方法是原地操作,返回值是None。第一个参数是指定的缩略图的大小,第二个是采样的,有Image.BICUBICPIL.Image.LANCZOSPIL.Image.BILINEARPIL.Image.NEAREST这四种采样方法。默认是Image.BICUBIC

crop(box)(裁剪矩形区域)

>>> im = Image.open("dog.jpg","r")

>>> box = (100,100,200,200)

>>> region = im.crop(box)

>>> region.show()

im.crop()

上面的代码在im图像上裁剪了一个box矩形区域,然后显示出来。box是一个有四个数字的元组(upper_left_x,upper_left_y,lower_right_x,lower_right_y),分别表示裁剪矩形区域的左上角x,y坐标,右下角的x,y坐标,规定图像的最左上角的坐标为原点(0,0),宽度的方向为x轴,高度的方向为y轴,每一个像素代表一个坐标单位。crop()返回的仍然是一个Image对象。

transpose(method)(图像翻转或者旋转)

>>> im_rotate_180 =im.transpose(Image.ROTATE_180)

>>> im_rotate_180.show()

上面的代码将im逆时针旋转180°,然后显示出来,methodtranspose的参数,表示选择什么样的翻转或者旋转方式,可以选择的值有:
    - Image.FLIP_LEFT_RIGHT,
表示将图像左右翻转
    - Image.FLIP_TOP_BOTTOM,
表示将图像上下翻转
    - Image.ROTATE_90,
表示将图像逆时针旋转90°
    - Image.ROTATE_180,
表示将图像逆时针旋转180°
    - Image.ROTATE_270,
表示将图像逆时针旋转270°
    - Image.TRANSPOSE,
表示将图像进行转置(相当于顺时针旋转90°)
    - Image.TRANSVERSE,
表示将图像进行转置,再水平翻转

paste(region,box,mask)(将一个图像粘贴到另一个图像)

>>> im.paste(region,(100,100),None)

>>> im.show()

上面的代码将region图像粘贴到左上角为(100,100)的位置。region是要粘贴的Image对象,box是要粘贴的位置,可以是一个两个元素的元组,表示粘贴区域的左上角坐标,也可以是一个四个元素的元组,表示左上角和右下角的坐标。如果是四个元素元组的话,boxsize必须要和regionsize保持一致,否则将会被convert成和region一样的size

split()(颜色通道分离)

>>> r,g,b = im.split()

>>> r.show()

>>> g.show()

>>> b.show()

split()方法可以原来图像的各个通道分离,比如对于RGB图像,可以将其R,G,B三个颜色通道分离。

merge(mode,channels)(颜色通道合并)

>>> im_merge = Image.merge("RGB",[b,r,g])

>>> im_merge.show()

merge方法和split方法是相对的,其将多个单一通道的序列合并起来,组成一个多通道的图像,mode是合并之后图像的模式,比如"RGB",channels是多个单一通道组成的序列。

resize(size,resample,box)

>>> im_resize = im.resize((200,200))

>>> im_resize

<PIL.Image.Image image mode=RGB size=200x200at 0x7F62B9E23470>

>>> im_resize.show()

>>> im_resize_box = im.resize((100,100),box= (0,0,50,50))

>>> im_resize_box.show()

resize方法可以将原始的图像转换大小,size是转换之后的大小,resample是重新采样使用的方法,仍然有Image.BICUBICPIL.Image.LANCZOSPIL.Image.BILINEARPIL.Image.NEAREST这四种采样方法,默认是PIL.Image.NEAREST,box是指定的要resize的图像区域,是一个用四个元组指定的区域(含义和上面所述box一致)

convert(mode,matrix,dither,palette,colors)(mode转换)

>>> im_L = im.convert("L")

>>> im_L.show()

>>> im_rgb = im_L.convert("RGB")

>>> im_rgb.show()

>>> im_L.mode

'L'

>>> im_rgb.mode

'RGB'

convert方法可以改变图像的mode,一般是在'RGB'(真彩图)'L'(灰度图)'CMYK'(压缩图)之间转换。上面的代码就是首先将图像转化为灰度图,再从灰度图转化为真彩图。值得注意的是,从灰度图转换为真彩图,虽然理论上确实转换成功了,但是实际上是很难恢复成原来的真彩模式的(不唯一)

filter(filter)(应用过滤器)

>>> im = Image.open("dog.jpg","r")

>>> from PIL import ImageFilter

>>> im_blur =im.filter(ImageFilter.BLUR)

>>> im_blur.show()

>>> im_find_edges =im.filter(ImageFilter.FIND_EDGES)

>>> im_find_edges.show()

>>> im_find_edges.save("find_edges.jpg")

>>> im_blur.save("blur.jpg")

filter方法可以将一些过滤器操作应用于原始图像,比如模糊操作,查找边、角点操作等。filter是过滤器函数,在PIL.ImageFilter函数中定义了大量内置的filter函数,比如BLUR(模糊操作),GaussianBlur(高斯模糊),MedianFilter(中值过滤器)FIND_EDGES(查找边)等。

point(lut,mode)(对图像像素操作)

>>> im_point = im.point(lambda x:x*1.5)
>>> im_point.show()
>>> im_point.save("im_point.jpg")

point方法可以对图像进行单个像素的操作,上面的代码对point方法传入了一个匿名函数,表示将图像的每个像素点大小都乘以1.5,mode是返回的图像的模式,默认是和原来图像的mode是一样的。

下面是一个结合了point函数,split函数,paste函数以及merge函数的小例子。

>>> source = im.split()
>>> R,G,B = 0,1,2
>>> mask = source[R].point(lambda x: x<100 and 255)
>>> # x<100,return 255,otherwise return 0
>>> out_G = source[G].point(lambda x:x*0.7)
>>> # 将out_G粘贴回来,但是只保留'R'通道像素值<100的部分
>>> source[G].paste(out_G,None,mask)
>>> # 合并成新的图像
>>> im_new = Image.merge(im.mode,source)
>>> im_new.show()
>>> im.show()

·        ImageEnhance()(图像增强)

>>> from PIL import ImageEnhance
>>> brightness = ImageEnhanBce.Brightness(im)
>>> im_brightness = brightness.enhance(1.5)
>>> im_brightness.show()
>>> im_contrast = ImageEnhance.Contrast(im)
>>> im_contrast.enhance(1.5)
<PIL.Image.Image image mode=RGB size=296x299 at 0x7F62AE271AC8>
>>> im_contrast.enhance(1.5).show()

ImageEnhance是PIL下的一个子类,主要用于图像增强,比如增加亮度(Brightness),增加对比度(Contrast)等。上面的代码将原来图像的亮度增加50%,将对比度也增加了50%。

                       词云

词云的概念

词云:也叫文字云,是对文本中出现频率较高的“关键词”予以视觉化的展现,词云图过滤掉大量的低频低质的文本信息,使得浏览者只要一眼扫过文本就可领略文本的主旨。

应用场合:了解政府工作工作报告中的关键信息,把握政策导向,了解一篇文章中出现频率较高的词。

wordcloud词云库

(1)wordcloud词云库概述

wordcloud是优秀的词云展示第三方库,以词语为基本单位,通过图形可视化的方式,更加直观和艺术的展示文本。

(2)wordcloud库安装

网络正常情况下命令行输入:

pip installwordcloud

(3)wordcloud库基本使用及步骤

wordcloud中有一个WordCloud类,通过实例化一个WordCloud对象: wordcloud.WordCloud()代表一个文本对应的词云,然后根据文本中词语出现的频率等参数绘制词云。

步骤:配置对象函数——加载词云文本——输出词云文件

(4)WordCloud的常用方法

Ø  .generate(txt):向WordCloud对象中加载文本

Ø  .to_file(filename):将词云输出为图片文件

(5)WordCloud的主要参数

Ø  width:生成词云图片的宽度

Ø  height:生成词云图片的高度

Ø  min_font_size:词云中字体的最小字号

Ø  max_font_size:词云中字体的最大字号

Ø  font_size:词云中字体的步进间隔

Ø  font_path:词云中字体文件的路径

Ø  max_words:设置词云中可显示的最大单词数量

Ø  stop_words:词云的排除词列表

Ø  mask:指定词云形状,并介绍imread()函数

Ø  background_color:指定词云图片的背景色

政府工作报告词云

(1)数据源:决胜全面建成小康社会夺取新时代中国特色社会主义伟大胜利(十九大报告)网址:https://www.python123.io/resources/pye/新时代中国特色社会主义.txt

(2)程序源代码

import jieba

import wordcloud

w = wordcloud.WordCloud( \

   width = 1000, height = 700,\

   background_color = "white",

   font_path = "msyh.ttc"   )

f = open("新时代中国特色社会主义.txt", "r")

t = f.read()

f.close()

ls = jieba.lcut(t)

txt = " ".join(ls)

w.generate(txt)

w.to_file("grwordcloud1.png")

讲解具体词云的生成步骤,加强对wordcloud的词云生成过程的理解,分析核心代码。