【基本图像操作】Matplotlib
程序员文章站
2022-07-14 10:05:31
...
Matplotlib简介
Matplotlib具有比PIL更强大的绘图功能,可以绘制条形图,饼状图,散点图等。
绘制图像,点,线
用四个点绘制和一条线绘制图像。
代码注释十分详细。
# -*- coding:utf-8 -*-
"""
@author:xunalove
date: 2017-9-7
python:2.7
os:ubuntu 16.04
"""
from PIL import Image
from pylab import *
#读取图像到数组
im = array(Image.open("/home/xuna/桌面/image/test.jpg"))
#绘制图像
imshow(im)
#给定的x坐标和y坐标
x = [100,1,200,200]
y = [200,1,0,100]
#使用红色星状标记绘制点
plot(x,y,'r*')
"""
控制图像的颜色和样式的命令
plot(x,y) #默认为蓝色实线
plot(x,y,'r*') #红色星状标记
plot(x,y,'ro-') #带有圆圈标记的绿线
plot(x,y,'ks:') #带有正方形标记的黑色点线
b 蓝色 g 绿色 r 红色 c 青色 m 品红 y 黄色 k 黑色 w 白色
- 实线 -- 虚线 : 点线
. 点 o 圆圈 s 正方形 * 星型 + 加号 x 差号
"""
#绘制连接前两个点的线
plot(x[:2],y[:2])
#添加标题,显示绘制的图像
title('Plotting: "empire.jpg"')
#不显示坐标轴
#axis("off")
#每一个脚本只能调用一次show()命令,一般放在脚本的结尾处
show()
运行效果:
有坐标
无坐标
绘制图像等轮廓和直方图
绘制等轮廓:需要将图像灰度化。
直方图: 压平处理(flatten()将任意数组按照行优先准则转换为一维数组),直方图是使用hist方法绘制。
flatten()的用法:http://blog.csdn.net/maoersong/article/details/23823925
直方图的意义:
表示该图像像素值的分布情况,用一定数目的小区间来指定像素值的范围,每一个小区间会得到落入该小区间表示范围的像素数目。
# -*- coding:utf-8 -*-
"""
@author:xunalove
date: 2017-9-7
python:2.7
os:ubuntu 16.04
"""
from PIL import Image
from pylab import *
#读取图像转换为灰度图像并保存到数组
im = array(Image.open("/home/xuna/桌面/image/test.jpg").convert('L'))
"""
#绘制图像等轮廓
#新建一个图像
figure()
#不使用颜色信息
gray()
#在原点的左上角显示轮廓图像
contour(im, origin = 'image')
axis('equal')
"""
#绘制直方图
figure()
#第二个参数128代表指定小区间的数目
hist(im.flatten(),128)
show()
效果图:第一张为绘制轮廓,第二张为绘制直方图
交互式标注
python库中的ginput()函数可以实现交互标注,例如绘制一幅图片,然后等待用户在绘制窗口区域点击三次,程序将这些点击的x,y坐标[x,y]自动保存在x列表中。
代码:
# -*- coding:utf-8 -*-
"""
@author:xunalove
date: 2017-9-7
python:2.7
os:ubuntu 16.04
"""
from PIL import Image
from pylab import *
#读取图像转换为灰度图像并保存到数组
im = array(Image.open("/home/xuna/桌面/image/test.jpg"))
imshow(im)
print 'Please click 3 points'
x = ginput(3)
print 'you clicked:',x
show()
运行效果: