赞
踩
图像的几何运算,主要用 skimage 的 transform 模块,函数比较多,功能齐全。
resize 函数可以用来改变图像的尺寸。
函数格式为:
skimage.transform.resize(image,output_shape)
image: 需要改变尺寸的图像
output_shape: 新的图像尺寸
例 1:读入一幅数字图像,改变图像的尺寸,显示原图像及处理后的图像,代码:
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('beforeresize')
plt.imshow(img,plt.cm.gray)
plt.subplot(122)
plt.title('afterresize')
plt.imshow(dst,plt.cm.gray)
plt.show()
输出:
rescale 函数可以对图像进行按比例缩放。
函数格式为:
skimage.transform.rescale(image,scale[,…])
scale 参数可以是单个 float 数,表示缩放的倍数,也可以是一个 float 型的 tuple,
如[0.2,0.5],表示将行、列数分开进行缩放。
例 2:读入一幅数字图像,通过设置不同的比例系数改变图像的尺寸,显示原图
像及处理后的图像,代码示例如下:
from skimage import transform,data,io
import matplotlib.pyplot as plt
img=data.camera()
plt.figure()
io.imshow(img)
print('原始图像尺寸',img.shape) #图像原始大小 plt.show()
img1=transform.rescale(img,0.1) #缩小为原来图像大小的 0.1 倍
plt.figure()
io.imshow(img1)
print('img1 尺寸',img1.shape)
plt.show()
img2=transform.rescale(img,[0.5,0.25])#缩小为原来图像行数一半,列数四分之一
plt.figure()
io.imshow(img2)
print('img2 尺寸',img2.shape)
plt.show()
img3=transform.rescale(img,[1,2]) #列数放大为原来图像大小的 2 倍
plt.figure()
io.imshow(img3)
print('img3 尺寸',img3.shape)
plt.show()
输出:
rotate 函数可以对图像进行旋转。
函数格式为
skimage.transform.rotate(image,angle[,…],resize=False)
angle 参数是个 float 类型数,表示旋转的度数
resize 用于控制在旋转时,是否改变大小 ,默认为 False
例 3:读入一幅数字图像,设置不同的旋转角度,改变图像的方向,显示原图像
及处理后的图像,代码示例如下:
from skimage import transform,data
import matplotlib.pyplot as plt
img=data.camera()
print('原始图像尺寸',img.shape) #图像原始大小
img1=transform.rotate(img,60) #旋转 60 度,不改变大小
print('img1 尺寸',img1.shape)
img2=transform.rotate(img,30,resize=True) #旋转 30 度,同时改变大小
print('img2 尺寸',img2.shape)
plt.figure('resize',figsize=(20,20))
plt.subplot(121)
plt.title('rotate60')
plt.imshow(img1,plt.cm.gray)
plt.subplot(122)
plt.title('rotate30')
plt.imshow(img2,plt.cm.gray)
plt.show()
输出:
skimage 模块中没有提供直接对图像做镜像的函数,所以我们利用 numpy 中 的函数 fliplr 和 flipud 来实现对图像的镜像。
函数调用格式:
fliplr(img); 把输入图像 img 沿水平方向,左右反转
flipud(img); 把输入图像 img 沿垂直方向,上下反转
例 4:读入一幅数字图像,分别对图像做水平镜像、垂直镜像、对角镜像,显示
原图像及处理后的图像,代码示例如下:
from skimage import data,io
from matplotlib.font_manager import FontProperties
import matplotlib.pyplot as plt
from numpy import fliplr,flipud
font_set=FontProperties(fname=r"c:\windows\fonts\simsun.ttc",size=12)
img=data.camera()
img_plr=fliplr(img)
img_pud=flipud(img)
img_corner=fliplr(img_pud)
plt.figure('img',figsize=(5,5))
plt.subplot(221)
io.imshow(img)
plt.title('原始图像',fontproperties=font_set)
plt.axis('off')
plt.subplot(222)
io.imshow(img_plr)
plt.title('水平镜像图像',fontproperties=font_set)
plt.axis('off')
plt.subplot(223)
io.imshow(img_pud)
plt.title('垂直镜像图像',fontproperties=font_set)
plt.axis('off')
plt.subplot(224)
io.imshow(img_corner)
plt.title('对角镜像图像',fontproperties=font_set)
plt.axis('off')
plt.show()
输出:
图像进行加法和减法运算时,必须保证两幅图像的大小、数据类型和通道数 目相同。可以利用 numpy 数组的加法和减法运算,实现图像的加法和减法。 numpy数组的加法是一种模操作,对于灰度图像,在做加法运算时,若像素值的和超过 255,如 300,numpy 数组得到的是 300%256=44,表示取余数。在做减法运算时, 若结果小于 0,将相减以后的差除以 255 取余后加 1。
例 5:读入 2 幅数字图像,分别加法和减法运算,显示原图像及处理后的图像,
代码示例如下:
from matplotlib.font_manager import FontProperties
from skimage import data,io,transform
from matplotlib import pyplot as plt
font_set=FontProperties(fname=r"c:\windows\fonts\simsun.ttc",size=12)
moon=data.moon()
camera=data.camera()
image_minus=moon-camera
image_plus=moon+camera
plt.figure('imgADD',figsize=(8,8))
plt.subplot(2,2,1)
plt.title('月亮图像',fontproperties=font_set)
io.imshow(moon)
plt.subplot(2,2,2)
plt.title('摄影师图像',fontproperties=font_set)
io.imshow(camera)
plt.subplot(2,2,3)
plt.title('月亮加摄影师图像',fontproperties=font_set)
io.imshow(image_plus)
plt.subplot(2,2,4)
plt.title('月亮减摄影师图像',fontproperties=font_set)
io.imshow(image_minus)
plt.show()
输出:
每日“大饼”:
没有不会做的事 只有不想做的事
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。