python數位影像處理(5):映像的繪製__python

來源:互聯網
上載者:User

實際上前面我們就已經用到了映像的繪製,如:

io.imshow(img)  

這一行代碼的實質是利用matplotlib包對圖片進行繪製,繪製成功後,返回一個matplotlib類型的資料。因此,我們也可以這樣寫:

import matplotlib.pyplot as pltplt.imshow(img)

imshow()函數格式為:

matplotlib.pyplot.imshow(X, cmap=None)

X: 要繪製的映像或數組。

cmap: 顏色圖譜(colormap), 預設繪製為RGB(A)色彩空間。

其它可選的顏色圖譜如下列表:

顏色圖譜 描述
autumn 紅-橙-黃
bone 黑-白,x線
cool 青-洋紅
copper 黑-銅
flag 紅-白-藍-黑
gray 黑-白
hot 黑-紅-黃-白
hsv hsv色彩空間, 紅-黃-綠-青-藍-洋紅-紅
inferno 黑-紅-黃
jet 藍-青-黃-紅
magma 黑-紅-白
pink 黑-粉-白
plasma 綠-紅-黃
prism  紅-黃-綠-藍-紫-...-綠模式
spring 洋紅-黃
summer 綠-黃
viridis 藍-綠-黃
winter 藍-綠

用的比較多的有gray,jet等,如:

plt.imshow(image,plt.cm.gray)
plt.imshow(img,cmap=plt.cm.jet)

在視窗上繪製完圖片後,返回一個AxesImage對象。要在視窗上顯示這個對象,我們可以調用show()函數來進行顯示,但進行練習的時候(ipython環境中),一般我們可以省略show()函數,也能自動顯示出來。

from skimage import io,dataimg=data.astronaut()dst=io.imshow(img)print(type(dst))
io.show()

顯示為:

可以看到,類型是'matplotlib.image.AxesImage'。顯示一張圖片,我們通常更願意這樣寫:

import matplotlib.pyplot as pltfrom skimage import io,dataimg=data.astronaut()plt.imshow(img)plt.show()

 

matplotlib是一個專業繪圖的庫,相當於matlab中的plot,可以設定多個figure視窗,設定figure的標題,隱藏座標尺,甚至可以使用subplot在一個figure中顯示多張圖片。一般我們可以這樣匯入matplotlib庫:

import matplotlib.pyplot as plt

也就是說,我們繪圖實際上用的是matplotlib包的pyplot模組。

一、用figure函數和subplot函數分別建立主視窗與子圖

例:分開並同時顯示宇航員圖片的三個通道

from skimage import dataimport matplotlib.pyplot as pltimg=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()   #顯示視窗

在圖片繪製過程中,我們用matplotlib.pyplot模組下的figure()函數來建立顯示視窗,該函數的格式為:

matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None)

所有參數都是可選的,都有預設值,因此調用該函數時可以不帶任何參數,其中:

num: 整型或字元型都可以。如果設定為整型,則該整型數字表示視窗的序號。如果設定為字元型,則該字串表示視窗的名稱。用該參數來命名視窗,如果兩個視窗序號或名相同,則後一個視窗會覆蓋前一個視窗。

figsize: 設定視窗大小。是一個tuple型的整數,如figsize=(8,8)

dpi: 整形數字,表示視窗的解析度。

facecolor: 視窗的背景顏色。

edgecolor: 視窗的邊框顏色。

用figure()函數建立的視窗,只能顯示一幅圖片,如果想要顯示多幅圖片,則需要將這個視窗再劃分為幾個子圖,在每個子圖中顯示不同的圖片。我們可以使用subplot()函數來劃分子圖,函數格式為:

matplotlib.pyplot.subplot(nrows, ncols, plot_number)

nrows: 子圖的行數。

ncols: 子圖的列數。

plot_number: 當前子圖的編號。

如:

plt.subplot(2,2,1)

則表示將figure視窗劃分成了2行2列共4個子圖,當前為第1個子圖。我們有時也可以用這種寫法:

plt.subplot(221)

兩種寫法效果是一樣的。每個子圖的標題可用title()函數來設定,是否使用座標尺可用axis()函數來設定,如:

plt.subplot(221)plt.title("first subwindow")plt.axis('off')  

 

二、用subplots來建立顯示視窗與劃分子圖

除了上面那種方法建立顯示視窗和劃分子圖,還有另外一種編寫方法也可以,如下例: 

import matplotlib.pyplot as pltfrom skimage import data,colorimg = 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間的參數

直接用subplots()函數來建立並劃分視窗。注意,比前面的subplot()函數多了一個s,該函數格式為:

matplotlib.pyplot.subplots(nrows=1, ncols=1)

nrows: 所有子圖行數,預設為1。

ncols: 所有子圖列數,預設為1。

返回一個視窗figure, 和一個tuple型的ax對象,該對象包含所有的子圖,可結

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.