1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

python数字图像处理实现图像的形变与缩放

Python图像处理:缩放与形变

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

python数字图像处理实现图像的形变与缩放

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