【读书笔记】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的区别
- 正如上面的代码,thumbnail改变的原图,返回值为None;而resize原图不变,返回的是改变大小后的图
- thumbnail只能缩小图片
- 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
结语
如果您有修改意见或问题,欢迎留言或者通过邮箱和我联系。
手打很辛苦,如果我的文章对您有帮助,转载请注明出处。