Python图像处理:缩放与形变
我是本际云服务器推荐网的小编小本本,今天主要为大家介绍一下Python图像处理中缩放与形变的相关问题。如果你需要对图像进行缩放或形变处理,可以使用skimage的transform模块。

skimage的transform模块
skimage的transform模块提供了多个函数,可以实现图像的缩放和形变等操作。下面详细介绍三个常用的函数:
1、改变图片尺寸resize
skimage.transform.resize()函数可以改变图片的尺寸。该函数的参数包括需要改变大小的图片和新的图片尺寸,函数格式如下:
skimage.transform.resize(image,output_shape)
下面是一个例子:
from skimage import transform,data
import matplotlib.pyplot as plt
img=data.camera()
dst=transform.resize(img,(80,60))
plt.subplot(121)
plt.title('before resize')
plt.imshow(img,plt.cm.gray)
plt.subplot(122)
plt.title('after resize')
plt.imshow(dst,plt.cm.gray)
plt.show()
运行结果如下图所示,从中可以看出,将camera图片由原来的512*512大小,变成了80*60大小。
2、按比例缩放rescale
skimage.transform.rescale()函数可以按比例对图片进行缩放,其参数包括图片和缩放比例,格式如下:
skimage.transform.rescale(image,scale[,…])
下面是一个实例:
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()函数可以对图片进行旋转操作,可以指定旋转的角度和是否改变图片大小,格式如下:
skimage.transform.rotate(image,angle[,…],resize=False)
下面是一个例子:
from skimage import transform,data
import matplotlib.pyplot as plt
img=data.camera()
print(img.shape)#图片原始大小
img1=transform.rotate(img,60)#旋转60度,不改变大小
print(img1.shape)
img2=transform.rotate(img,30,resize=True)#旋转30度,同时改变大小
print(img2.shape)
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()函数可以生成高斯金字塔图像,可以控制金字塔缩放比例,格式如下:
skimage.transform.pyramid_gaussian(image,downscale=2)
下面是一个例子:
from skimage import data,transform
import numpy as np
import matplotlib.pyplot as plt
image=data.astronaut()#载入图像
rows,cols,dim=image.shape#获取图像信息
pyramid=tuple(transform.pyramid_gaussian(image,downscale=2))#生成高斯金字塔图像
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()
运行结果如下图所示:
除了高斯金字塔外,skimage.transform还提供了其他图像金字塔函数,可以根据需求选择。至此,本文介绍的Python图像处理内容就结束了,希望对大家有所帮助。
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6812.html
