Python计算机视觉编程1.2  Matplotlib_Python计算机视觉编程1.2  Matplotlib试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > Python计算机视觉编程 > 1.2  Matplotlib

Python计算机视觉编程——1.2  Matplotlib

我们处理数学运算、绘制图表,或者在图像上绘制点、直线和曲线时,Matplotlib 是个很好的类库,具有比PIL 更强大的绘图功能。Matplotlib 可以绘制出高质量的图表,就像本书中的许多插图一样。Matplotlib 中的PyLab 接口包含很多方便用户创建图像的函数。Matplotlib 是开源工具,可以从http://matplotlib.sourceforge.net/ 免费下载。该链接中包含非常详尽的使用说明和教程。下面的例子展示了本书中需要使用的大部分函数。 1.2.1  绘制图像、点和线 尽管Matplotlib 可以绘制出较好的条形图、饼状图、散点图等,但是对于大多数计算机视觉应用来说,仅仅需要用到几个绘图命令。最重要的是,我们想用点和线来表示一些事物,比如兴趣点、对应点以及检测出的物体。下面是用几个点和一条线绘制图像的例子: from PIL import Image from pylab import * # 读取图像到数组中 im = array(Image.open('empire.jpg')) # 绘制图像 imshow(im) # 一些点 x = [100,100,400,400] y = [200,500,200,500] # 使用红色星状标记绘制点 plot(x,y,'r*') # 绘制连接前两个点的线 plot(x[:2],y[:2]) # 添加标题,显示绘制的图像 title('Plotting: "empire.jpg"') show() 上面的代码首先绘制出原始图像,然后在x 和y 列表中给定点的x 坐标和y 坐标上绘制出红色星状标记点,最后在两个列表表示的前两个点之间绘制一条线段(默认为蓝色)。该例子的绘制结果如图1-2 所示。show() 命令首先打开图形用户界面(GUI),然后新建一个图像窗口。该图形用户界面会循环阻断脚本,然后暂停,直到最后一个图像窗口关闭。在每个脚本里,你只能调用一次show() 命令,而且通常是在脚本的结尾调用。注意,在PyLab 库中,我们约定图像的左上角为坐标原点。 图像的坐标轴是一个很有用的调试工具;但是,如果你想绘制出较美观的图像,加上下列命令可以使坐标轴不显示: axis('off') 上面的命令将绘制出如图1-2 右边所示的图像。 图1-2:Matplotlib 绘图示例。带有坐标轴和不带坐标轴的包含点和一条线段的图像 在绘图时,有很多选项可以控制图像的颜色和样式。最有用的一些短命令如表1-1、表1-2 和表1-3 所示。使用方法见下面的例子: plot(x,y) # 默认为蓝色实线 plot(x,y,'r*') # 红色星状标记 plot(x,y,'go-') # 带有圆圈标记的绿线 plot(x,y,'ks:') # 带有正方形标记的黑色虚线 表1-1:用PyLab库绘图的基本颜色格式命令 表1-2:用PyLab库绘图的基本线型格式命令 表1-3:用PyLab库绘图的基本绘制标记格式命令 1.2.2  图像轮廓和直方图 下面来看两个特别的绘图示例:图像的轮廓和直方图。绘制图像的轮廓(或者其他二维函数的等轮廓线)在工作中非常有用。因为绘制轮廓需要对每个坐标[x, y] 的像素值施加同一个阈值,所以首先需要将图像灰度化: from PIL import Image from pylab import * # 读取图像到数组中 im = array(Image.open('empire.jpg').convert('L')) # 新建一个图像 figure() # 不使用颜色信息 gray() # 在原点的左上角显示轮廓图像 contour(im, origin='image') axis('equal') axis('off') 像之前的例子一样,这里用PIL 的convert() 方法将图像转换成灰度图像。 图像的直方图用来表征该图像像素值的分布情况。用一定数目的小区间(bin)来指定表征像素值的范围,每个小区间会得到落入该小区间表示范围的像素数目。该(灰度)图像的直方图可以使用hist() 函数绘制: figure() hist(im.flatten(),128) show() hist() 函数的第二个参数指定小区间的数目。需要注意的是,因为hist() 只接受一维数组作为输入,所以我们在绘制图像直方图之前,必须先对图像进行压平处理。flatten() 方法将任意数组按照行优先准则转换成一维数组。图1-3 为等轮廓线和直方图图像。 图1-3:用Matplotlib 绘制图像等轮廓线和直方图 1.2.3  交互式标注 有时用户需要和某些应用交互,例如在一幅图像中标记一些点,或者标注一些训练数据。PyLab 库中的ginput() 函数就可以实现交互式标注。下面是一个简短的例子: from PIL import Image from pylab import * im = array(Image.open('empire.jpg')) imshow(im) print 'Please click 3 points' x = ginput(3) print 'you clicked:',x show() 上面的脚本首先绘制一幅图像,然后等待用户在绘图窗口的图像区域点击三次。程序将这些点击的坐标[x, y] 自动保存在x 列表里。

展开全文

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

《Python计算机视觉编程》其他试读目录

• 1.1  PIL:Python图像处理类库
• 1.2  Matplotlib [当前]
• 1.3  NumPy
• 1.4  SciPy
• 1.5  高级示例:图像去噪