小編寫這篇文章的主要目的,主要是給大家介紹關于Python的一些事宜,比如會涉及到圖像處理相關的問題,比如會涉及到相關的圖像的形變與縮放,那么,遇到這種問題的話,具體要怎么操作呢?下面就給大家詳細解答下。
skimage的transform模塊
圖形的放大與縮小,應用到的技術是skimage的transform模塊,函數比較多,功能齊全。
1、改變圖片尺寸resize
函數格式為:
skimage.transform.resize(image,output_shape)
image:需要改變尺寸的圖片
output_shape:新的圖片尺寸
from skimage import transform,data import matplotlib.pyplot as plt img=data.camera() dst=transform.resize(img,(80,60)) plt.figure('resize') plt.subplot(121) plt.title('before resize') plt.imshow(img,plt.cm.gray) plt.subplot(122) plt.title('before resize') plt.imshow(dst,plt.cm.gray) plt.show()
將camera圖片由原來的512*512大小,變成了80*60大小。從下圖中的坐標尺,我們能夠看出來:
2、按比例縮放rescale
函數格式為:
skimage.transform.rescale(image,scale[,...])
scale參數可以是單個float數,表示縮放的倍數,也可以是一個float型的tuple,如[0.2,0.5],表示將行列數分開進行縮放
from skimage import transform,data img=data.camera() print(img.shape)#圖片原始大小 print(transform.rescale(img,0.1).shape)#縮小為原來圖片大小的0.1倍 print(transform.rescale(img,[0.5,0.25]).shape)#縮小為原來圖片行數一半,列數四分之一 print(transform.rescale(img,2).shape)#放大為原來圖片大小的2倍
結果為:
(512,512)
(51,51)
(256,128)
(1024,1024)
3、旋轉rotate
skimage.transform.rotate(image,angle[,...],resize=False)
angle參數是個float類型數,表示旋轉的度數
resize用于控制在旋轉時,是否改變大小,默認為False
from skimage import transform,data import matplotlib.pyplot as plt img=data.camera() print(img.shape)#圖片原始大小 img1=transform.rotate(img,60)#旋轉90度,不改變大小 print(img1.shape) img2=transform.rotate(img,30,resize=True)#旋轉30度,同時改變大小 print(img2.shape) plt.figure('resize') plt.subplot(121) plt.title('rotate 60') plt.imshow(img1,plt.cm.gray) plt.subplot(122) plt.title('rotate 30') plt.imshow(img2,plt.cm.gray) plt.show()
顯示結果:
4、圖像金字塔
以多分辨率來解釋圖像的一種有效但概念簡單的結構就是圖像金字塔。圖像金字塔最初用于機器視覺和圖像壓縮,一幅圖像的金字塔是一系列以金字塔形狀排列的分辨率逐步降低的圖像集合。金字塔的底部是待處理圖像的高分辨率表示,而頂部是低分辨率的近似。當向金字塔的上層移動時,尺寸和分辨率就降低。
在此,我們舉一個高斯金字塔的應用實例,函數原型為:
skimage.transform.pyramid_gaussian(image,downscale=2) downscale控制著金字塔的縮放比例 import numpy as np import matplotlib.pyplot as plt from skimage import data,transform image=data.astronaut()#載入宇航員圖片 rows,cols,dim=image.shape#獲取圖片的行數,列數和通道數 pyramid=tuple(transform.pyramid_gaussian(image,downscale=2))#產生高斯金字塔圖像 #共生成了log(512)=9幅金字塔圖像,加上原始圖像共10幅,pyramid[0]-pyramid[1] composite_image=np.ones((rows,cols+cols/2,3),dtype=np.double)#生成背景 composite_image[:rows,:cols,:]=pyramid[0]#融合原始圖像 i_row=0 for p in pyramid[1:]: n_rows,n_cols=p.shape[:2] composite_image[i_row:i_row+n_rows,cols:cols+n_cols]=p#循環融合9幅金字塔圖像 i_row+=n_rows plt.imshow(composite_image) plt.show()
上圖,就是10張金字塔圖像,下標為0的表示原始圖像,后面每層的圖像行和列變為上一層的一半,直至變為1
除了高斯金字塔外,還有其它的金字塔,如:
skimage.transform.pyramid_laplacian(image,downscale=2):
綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家帶來幫助。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/128826.html
摘要:計算機圖形學中的應用非常廣泛的變換是一種稱為仿射變換的特殊變換,在仿射變換中的基本變換包括平移旋轉縮放剪切這幾種。表示縮小,表示放大錯切圖像錯切變換在圖像幾何形變方面非常有用,常見的錯切變換分為方向與方向的錯切變換。 二維圖形學的變換 使用過前端的css3,canva,svg的小伙伴應該對平移,旋轉,縮放,剪切這些效果變換應該很熟悉了,但應該大部分小伙伴應該不清楚其中的原理,在二維圖形...
閱讀 911·2023-01-14 11:38
閱讀 878·2023-01-14 11:04
閱讀 740·2023-01-14 10:48
閱讀 1982·2023-01-14 10:34
閱讀 942·2023-01-14 10:24
閱讀 819·2023-01-14 10:18
閱讀 499·2023-01-14 10:09
閱讀 572·2023-01-14 10:02