【读书笔记】Python计算机视觉编程(一)

PIL:python图像处理类库

pip install Pillow
//用pip安装
from PIL import Image


pil_im = Image.open("test.png")
//读入一个名为test.png的图片
type(pil_im)
//显示pil_im的数据类型,<class 'PIL.PngImagePlugin.PngImageFile'>
pil_im.show()
//生成一个窗口显示test.png图片
pil_im = Image.open("test.png").convert("L")
//将test.png转化为灰度图
pil_im = Image.open("test.png").convert("1")
//将test.png转化为二值图
pil_im.save("test.jpg")
//保存图像
//pil_im是open读入的图片,将被保存为test.jpg
//这里可以保存为不同格式的图片,.jpg或.png都可以
//是新生成一张图片并保存,并不会覆盖原文件

创建缩略图

img = pil_im.thumbnail((128, 128))
//创建pil_im的缩略图
pil_im.show()
//显示生成的缩略图
img.show()
//报错,因为.thumbnail改变的是原图,返回给img的值为None

thumbnail和resize的区别

  1. 正如上面的代码,thumbnail改变的原图,返回值为None;而resize原图不变,返回的是改变大小后的图
  2. thumbnail只能缩小图片
  3. thumbnail缩小图片是按原图的长宽比例;而resize改变图片尺寸是严格按照赋值的

复制和粘贴图像区域

box = (100, 100, 400, 400)
//四元组表示剪裁区域
//1,2,3,4元素分别对应,剪裁区域左边框到原图左边框的距离;剪裁区域上边框到原图上边框的距离;剪裁区域右边框到原图左边框的距离;剪裁区域下边框到原图上边框的距离
region = pil_im.crop(box)
//按box取值切割原图pil_im,剪裁下来的图返回给region
region = region.transpose(Image.ROTATE_180)
//region旋转180度
pil_im.paste(region, box)
//将旋转后的region粘贴会原处,这一操作会改变原图

调整尺寸和旋转

out = pil_im.resize((128, 128))
//正如上面说的,resize原图不变,返回给out大小调整后的图片
out = pil_im.rotate(45)
//旋转操作,参数是旋转角度

Matplotlib

pip install matplotlib
//pip安装
from PIL import Image
import matplotlib.pylab as plt


im = plt.array(Image.open("test.png"))
//读取图片,并转为“numpy.ndarray”格式
//因为下面的画点操作,所以要转成“numpy.ndarray”格式
plt.imshow(im)
//plt.imshow()指定了接下来的操作是对im执行,并显示其格式,不显示图像

x = [100, 100, 400, 400]
y = [200, 500, 200, 500]

plt.plot(x, y, "r*")
plt.plot(x[:2], y[:2])
//连接前两个点,即(100,200)和(100,500)

plt.title('Plotting:"test.png"')
//加标题

plt.axis("off")
//plt.axis是对坐标轴进行操作,"off"是去掉坐标轴

plt.show()
//显示处理后的图像
//plt.show()过后,再想处理哪一张图片,需要用plt.imshow()重新指定
plt.axis()的参数 含义
‘on’ 打开坐标轴
‘off’ 关闭坐标轴
‘equal’ 通过改变轴取值的范围,使横轴和纵轴跨度相等。不改变图片尺寸,多出来的部分是空白
‘scaled’
‘tight’
‘auto’
’ normal’
‘image’
‘square’

图像轮廓和直方图

from PIL import Image
import matplotlib.pylab as plt


im = plt.array(Image.open("test.png").convert("L"))

plt.figure()
//新建一个图像,并指定下面的操作是在这个图像上
plt.gray()
//设置这个图像为单通道图像,即灰度图

plt.contour(im, origin="image")
//画轮廓

plt.axis("equal")
plt.axis("off")

plt.figure()
//再创建一个新图像,接下来的操作是在这个图像上

plt.hist(im.flatten(), 128)
//绘制直方图
//im.flatten()将转化为“numpy.ndarray”格式的原图像按行有限准则变成一维数组
//128指定了有128个直方条形图,每个条的高度,是一维数组中,落入这个条的像素值的和

plt.show()
//显示两张图像

交互式标注

from PIL import Image
import matplotlib.pylab as plt


im = plt.array(Image.open("test.png"))
plt.imshow(im)

x = plt.ginput(3)
//显示原图像,等待点击三次,将位置信息返回给列表x

结语

如果您有修改意见或问题,欢迎留言或者通过邮箱和我联系。
手打很辛苦,如果我的文章对您有帮助,转载请注明出处。

猜你喜欢

转载自blog.csdn.net/Zhang_Chen_/article/details/90182205