<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
實際上前面我們就已經用到了影象的繪製,如:
io.imshow(img)
這一行程式碼的實質是利用matplotlib包對圖片進行繪製,繪製成功後,返回一個matplotlib型別的資料。因此,我們也可以這樣寫:
import matplotlib.pyplot as plt plt.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,data img=data.astronaut() dst=io.imshow(img) print(type(dst)) io.show()
顯示為:
可以看到,型別是'matplotlib.image.AxesImage'。顯示一張圖片,我們通常更願意這樣寫:
import matplotlib.pyplot as plt from skimage import io,data img=data.astronaut() plt.imshow(img) plt.show()
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() #顯示視窗
在圖片繪製過程中,我們用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')
除了上面那種方法建立顯示視窗和劃分子圖,還有另外一種編寫方法也可以,如下例:
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間的引數
直接用subplots()函數來建立並劃分視窗。注意,比前面的subplot()函數多了一個s,該函數格式為:
matplotlib.pyplot.subplots(nrows=1, ncols=1)
nrows: 所有子圖行數,預設為1。
ncols: 所有子圖列數,預設為1。
返回一個視窗figure, 和一個tuple型的ax物件,該物件包含所有的子圖,可結合ravel()函數列出所有子圖,如:
fig, axes = plt.subplots(2, 2, figsize=(7, 6)) ax0, ax1, ax2, ax3 = axes.ravel()
建立了2行2列4個子圖,分別取名為ax0,ax1,ax2和ax3, 每個子圖的標題用set_title()函數來設定,如:
ax0.imshow(img) ax0.set_title("Original image")
如果有多個子圖,我們還可以使用tight_layout()函數來調整顯示的佈局,該函數格式為:
matplotlib.pyplot.tight_layout(pad=1.08, h_pad=None, w_pad=None, rect=None)
所有的引數都是可選的,呼叫該函數時可省略所有的引數。
pad: 主視窗邊緣和子圖邊緣間的間距,預設為1.08
h_pad, w_pad: 子圖邊緣之間的間距,預設為 pad_inches
rect: 一個矩形區域,如果設定這個值,則將所有的子圖調整到這個矩形區域內。
一般呼叫為:
plt.tight_layout() #自動調整subplot間的引數
除了使用matplotlib庫來繪製圖片,skimage還有另一個子模組viewer,也提供一個函數來顯示圖片。不同的是,它利用Qt工具來建立一塊畫布,從而在畫布上繪製影象。
例:
from skimage import data from skimage.viewer import ImageViewer img = data.coins() viewer = ImageViewer(img) viewer.show()
最後總結一下,繪製和顯示圖片常用到的函數有:
函數名 | 功能 | 呼叫格式 |
figure | 建立一個顯示視窗 | plt.figure(num=1,figsize=(8,8) |
imshow | 繪製圖片 | plt.imshow(image) |
show | 顯示視窗 | plt.show() |
subplot | 劃分子圖 | plt.subplot(2,2,1) |
title | 設定子圖示題(與subplot結合使用) | plt.title('origin image') |
axis | 是否顯示座標尺 | plt.axis('off') |
subplots | 建立帶有多個子圖的視窗 | fig,axes=plt.subplots(2,2,figsize=(8,8)) |
ravel | 為每個子圖設定變數 | ax0,ax1,ax2,ax3=axes.ravel() |
set_title | 設定子圖示題(與axes結合使用) | ax0.set_title('first window') |
tight_layout | 自動調整子圖顯示佈局 | plt.tight_layout() |
以上就是python數位影像處理影象的繪製詳解的詳細內容,更多關於python數位影像處理繪製的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45