Matplotlib
1.1绘制图像、点、线
Matplotlib可以绘制出较好的条形图、饼状图、散点图等.
from PIL import Image
from pylab import *
#读取图像到数组中
im = array(Image.open('FatherAndSon.jpg'))
#绘制图像
imshow(im)
#一些点
x = [50,50,100,100]
y = [50,100,50,100]
#使用红色星状标记绘制点
plot(x,y,'r*')
#绘制连接前两个点的线
plot(x[:2],y[:2])
#添加标题,显示绘制的图像
title('Plotting:"FatherAndSon.jpg"')
#不显示坐标轴
axis('off')
show()
在每个脚本里只能调用一次show()命令,而且通常是在脚本的结尾调用.
plot(x,y) # 默认为蓝色实线
plot(x,y,'r*') # 红色星状标记
plot(x,y,'go-') # 带有圆圈标记的绿线
plot(x,y,'ks:') # 带有正方形标记
颜色 | |
'b' | 蓝色 |
'g' | 绿色 |
'r' | 红色 |
'c' | 青色 |
'm' | 品红 |
'y' | 黄色 |
'k' | 黑色 |
’w‘ | 白色 |
线型 | |
'-' | 实线 |
'--' | 虚线 |
':' | 点线 |
标记 | |
'·' | 点 |
’o‘ | 圆圈 |
's' | 正方形 |
'*' | 星号 |
'+' | 加号 |
'x' | 叉号 |
1.2绘制图像轮廓和直方图
绘制轮廓需要对每个坐标 [x, y] 的像素值施加同一个阈值,所以首先需要将图像灰度化.
from PIL import Image
from pylab import *
# 读取图像到数组中
im = array(Image.open('FatherAndSon.jpg').convert('L'))
# 新建一个图像
figure()
# 不使用颜色信息
gray()
# 在原点的左上角显示轮廓图像
contour(im, origin='image')
axis('equal')
axis('off')
figure()
hist(im.flatten(),128)
show()
图像的直方图用来表征该图像像素值的分布情况.用一定数目的小区间(bin)来指定表征像素值的范围,每个小区间会得到落入该小区间表示范围的像素数目.该(灰度)图像的直方图可以使用 hist() 函数绘制.hist() 函数的第二个参数指定小区间的数目.需要注意的是,因为 hist() 只接受一维数组作为输入,所以我们在绘制图像直方图之前,必须先对图像进行压平处理.flatten() 方法将任意数组按照行优先准则转换成一维数组.
1.3交互式标注
from PIL import Image
from pylab import *
im = array(Image.open('FatherAndSon.jpg'))
imshow(im)
print("Please click 3 points")
x = ginput(3)
print("you clicked:",x)
show()
#如果出现x输出为空列表,请按此博客最后一幅图所示操作
脚本首先绘制一幅图像,然后等待用户在绘图窗口的图像区域点击三次。程序将这些点击的坐标 [x, y] 自动保存在 x 列表里 .