图像的几何变换(缩放、平移、旋转)

图像的几何变换是指对图像进行缩放、平移和旋转等操作,从而改变图像在平面上的位置、大小和方向。这些变换可以通过数学计算和像素级别的操作来实现,常用于图像处理和计算机视觉领域。

缩放变换: 缩放是指改变图像的尺寸大小,使其变大或变小。缩放变换可以应用于整个图像或者特定区域。在图像缩放中,可以通过插值算法来调整像素的位置和灰度值,常见的插值方法有最近邻插值、双线性插值和双立方插值等。
缩放变换可以实现图像的放大和缩小效果。当将图像放大时,会导致图像失真和锯齿状边缘的出现;而将图像缩小时,可能会造成信息丢失和细节模糊。因此,在进行图像缩放时需要权衡保留图像细节和减少失真之间的关系。

平移变换: 平移是指在图像平面上按照指定的平移量沿着 x 轴和 y 轴方向移动图像的位置。平移变换可以实现图像的横向或纵向平移,使得图像在平面上的位置发生改变。
平移变换的实现很简单,只需要将图像的每个像素点按照指定的平移量进行偏移即可。平移变换常用于图像对齐、目标跟踪和图像拼接等应用中。

旋转变换: 旋转是指按照指定的角度将图像绕着一个中心点进行旋转。旋转变换可以使图像在平面上发生旋转,改变图像的方向和角度。
旋转变换的实现通常需要确定旋转角度和旋转中心点。通过对图像的每个像素点进行坐标变换,并使用插值算法计算旋转后的像素位置和灰度值,可以得到旋转后的图像。

旋转变换常用于图像校正、目标识别和匹配等应用中。在数字图像处理中,旋转变换也是非常基础且重要的操作之一。

总的来说,图像的几何变换包括缩放、平移和旋转等操作,它们可以改变图像的尺寸、位置和方向。这些变换在图像处理和计算机视觉领域中有广泛的应用,例如图像放大、图像对齐、目标跟踪、图像校正和匹配等。通过对图像进行几何变换,可以实现图像的形状调整、空间重构和图像配准等功能。

图像的几何变换

学习目标

  • 掌握图像的缩放、平移、旋转等
  • 了解数字图像的仿射变换和透射变换

1 图像的缩放

缩放是对图像的大小进行调整,即 使图像放大或缩小

cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR)

参数:

  • src :输入图像
  • dsize ;绝对尺寸 ,直接指定调整后图像的大小
  • fx,fy :相对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可
  • interpolation: 插值方法
  • 在这里插入图片描述

代码实现

import cv2 as cv
#读取图片

img1 = cv.imread('lena.png')

#图像的缩放

#法1    :绝对尺寸

rows, cols = img1.shape[:2]
res  = cv.resize(img1 , (2*cols,2*rows),interpolation=cv.INTER_CUBIC)

#法二  :相对尺寸
res1 = cv.resize(img1,None,fx=0.5,fy=0.5)

#图像显示
cv.imshow("original",img1)
cv.imshow("enlarge",res)
cv.imshow("shrink",res1)
cv.waitKey(0)

结果展示

在这里插入图片描述

2图像的平移

在这里插入图片描述

代码实现

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']

#读取图像
img1 = cv.imread("lena.png")

#图像的平移
rows ,cols = img1.shape[:2]
M= np.float32([[1,0,100],[0,1,50]])   #平移矩阵
dst = cv.warpAffine(img1,M,(cols,rows))

#图像的显示
fig,axes = plt.subplots(nrows=1,ncols=2,figsize=(7,4),dpi=100)
axes[0].imshow(img1[:,:,::-1])
axes[0].set_title("原图")

axes[1].imshow(dst[:,:,::-1])
axes[1].set_title("平移后的结果")
plt.show()

结果展示

在这里插入图片描述

3 图像的旋转

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码实现

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']


#读取图像
img = cv.imread("lena.png")

#旋转图像

rows ,cols = img.shape[:2]
#生成旋转矩阵
M = cv.getRotationMatrix2D((cols/2 ,rows/2),90,1)
#进行旋转变换
dst = cv.warpAffine(img,M,(cols,rows))


#图像展示
fig ,axes = plt.subplots(nrows=1,ncols=2,figsize=(5,4),dpi=100)
axes[0].imshow(img[:,:,::-1])
axes[0].set_title("原图")

axes[1].imshow(dst[:,:,::-1])
axes[1].set_title("旋转后的结果")

plt.show()

M = cv.getRotationMatrix2D((cols/2 ,rows/2),90,1)

  • cols/2 ,rows/2 :旋转中心
  • 90 : 逆时针旋转角度
  • 1:缩放比例(不进行缩放)

结果展示

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值