实际上前面我们就已经用到了图像的绘制,如:
io.imshow(img)
这一行代码就是得利用matplotlib包对图片进行绘制,绘制成功后,返回一个matplotlib类型的数据。要显示绘制的图片,我们可以调用show()函数来进行显示,但进行练习的时候,一般我们可以省略show()函数,也能自动显示出来。
from skimage import io,data img=data.astronaut() dst=io.imshow(img) print(type(dst)) io.show()
显示为:
可以看到,类型是'matplotlib.image.AxesImage',它除了图像本身信息,还有坐标尺等其它信息。如果要同时显示两张图片,那么在显示第二张图片的时候,会把第一张图片覆盖掉。
matplotlib是一个专业绘图的库,相当于matlab中的plot,可以设置多个figure,设置figure的标题,隐藏坐标尺,甚至可以使用subplot在一个figure中显示多张图片。一般我们可以这样导入matplotlib库:
import matplotlib.pyplot as plt
也就是说,我们绘图实际上用的是matplotlib包的pyplot模块。
例:分开并同时显示宇航员图片的三个通道
from skimage import data import matplotlib.pyplot as plt img=data.astronaut() plt.figure(num='astronaut',figsize=(8,8)) #创建一个名为astronaut的窗口,并设置大小 plt.subplot(2,2,1) #将窗口分为两行两列四个子窗口,则可显示四幅图片 plt.title('origin image') #第一幅图片标题 plt.imshow(img) #绘制第一幅图片 plt.subplot(2,2,2) #第二个子窗口 plt.title('R channel') #第二幅图片标题 plt.imshow(img[:,:,0],plt.cm.gray) #绘制第二幅图片,且为灰度图 plt.axis('off') #不显示坐标尺寸 plt.subplot(2,2,3) #第三个子窗口 plt.title('G channel') #第三幅图片标题 plt.imshow(img[:,:,1],plt.cm.gray) #绘制第三幅图片,且为灰度图 plt.axis('off') #不显示坐标尺寸 plt.subplot(2,2,4) #第四个子窗口 plt.title('B channel') #第四幅图片标题 plt.imshow(img[:,:,2],plt.cm.gray) #绘制第四幅图片,且为灰度图 plt.axis('off') #不显示坐标尺寸 plt.show() #显示窗口
另外一种编写方法也可以:
import matplotlib.pyplot as plt from skimage import data,color img = data.immunohistochemistry() hsv = color.rgb2hsv(img) fig, axes = plt.subplots(2, 2, figsize=(7, 6)) ax0, ax1, ax2, ax3 = axes.ravel() ax0.imshow(img) ax0.set_title("Original image") ax1.imshow(hsv[:, :, 0], cmap=plt.cm.gray) ax1.set_title("H") ax2.imshow(hsv[:, :, 1], cmap=plt.cm.gray) ax2.set_title("S") ax3.imshow(hsv[:, :, 2], cmap=plt.cm.gray) ax3.set_title("V") for ax in axes.ravel(): ax.axis('off') fig.tight_layout() #自动调整subplot间的参数
两种书写方法效果是一样的,你喜欢哪种就用哪种!!
除了使用matplotlib库来绘制图片,skimage还有另一个模块ImageViewer,也可以显示图片。
它是利用Qt工具来创建一块画布,从而在画布上绘制图像。
例:
from skimage import data from skimage.viewer import ImageViewer img = data.coins() viewer = ImageViewer(img) viewer.show()