当前位置:   article > 正文

OpenCV-矩阵仿射变换_opencv 仿射矩阵

opencv 仿射矩阵

所有相关接口验证demo以上传至仓库

代码地址:https://gitee.com/norep/learn-opencv

cv2.warpAffine 是 OpenCV 库中的一个函数,用于根据一个仿射变换矩阵对图像进行变换。这个函数可以用来旋转、缩放、平移或剪切图像。它使用仿射变换,这意味着图像中的直线在变换后仍然是直线,但角度可能会改变。

dst = cv2.warpAffine(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None)
  • 1

参数说明:

  • src:一个 NumPy 数组,表示要进行仿射变换的源图像。

  • M:一个二维 NumPy 数组或一个 NumPy 数组的元组,表示仿射变换矩阵。这个矩阵应该有 2x3 或 3x3 的形状,其中 2x3 矩阵表示二维变换,3x3 矩阵表示三维变换。

  • dsize:一个元组 (width, height),表示目标图像的新尺寸。如果只提供了一个值,另一个值将被自动计算以保持图像的宽高比。

  • dst:一个可选的 NumPy 数组,用于存储变换后的图像。如果提供了这个参数,函数将返回 dst 而不是创建一个新数组。

  • flags:一个可选的整数,用于指定插值方法。常见的插值方法包括 cv2.INTER_LINEAR、cv2.INTER_CUBIC 等。

  • borderMode:一个可选的整数,用于指定边界模式。常见的边界模式包括 cv2.BORDER_CONSTANT、cv2.BORDER_REPLICATE 等。

  • borderValue:一个可选的元组 (b, g, r),用于指定边界值。这个值将在图像的边界像素上应用。

仿射变换之平移

平移矩阵

二维平移矩阵
在这里插入图片描述

三维平移矩阵
在这里插入图片描述

使用二维平移矩阵平移图片

M = np.float32([[1, 0, 30], [0, 1, 30]])
new_pic1 = cv2.warpAffine(pic1, M, (pic1_w, pic1_h))
  • 1
  • 2

仿射变换之旋转

OpenCV中提供了对应的API自动创建旋转矩阵

绕点旋转矩阵

M = cv2.getRotationMatrix2D(center, angle, scale)
# M = cv2.getRotationMatrix2D((100, 100), 45, 1)
  • 1
  • 2

参数说明:

  • center:一个元组 (x, y),表示图像绕其旋转的中心点坐标。

  • angle:一个浮点数,表示旋转的角度,以度为单位。

  • scale:一个可选的浮点数,表示旋转时的缩放因子。如果设置为 1,则表示没有缩放;如果大于 1,则表示放大;如果小于 1,则表示缩小。

返回值:

  • M:一个二维 NumPy 数组,表示绕中心点旋转所需的仿射变换矩阵

注意:cv2.getRotationMatrix2D 函数返回的矩阵 M 是一个 2x3 的数组,表示图像的二维仿射变换。

使用二维旋转矩阵旋转图片

M = cv2.getRotationMatrix2D((100, 100), 45, 1)
new_pic1 = cv2.warpAffine(pic1, M, (pic1_w, pic1_h))
  • 1
  • 2

仿射变换之坐标系转换

通过三个坐标创建仿射变换矩阵

cv2.getAffineTransform 是 OpenCV 库中的一个函数,用于计算一个图像从一个坐标系变换到另一个坐标系的仿射变换矩阵

这个函数在图像处理中非常有用,特别是在需要对图像进行仿射变换(如旋转、缩放和平移)时。

M = cv2.getAffineTransform(srcPoints, dstPoints)
  • 1

参数说明:

  • srcPoints:一个 NumPy 数组或一个包含三个点(坐标元组)的列表,表示源坐标系中的点。这些点将被映射到目标坐标系中的对应点。

  • dstPoints:一个 NumPy 数组或一个包含三个点(坐标元组)的列表,表示目标坐标系中的点。这些点是源坐标系中相应点的映射。

返回值:

  • M:一个2x3的 NumPy 数组,表示从源坐标系到目标坐标系的仿射变换矩阵
src = np.float32([[50, 50], [150, 50], [50, 150]])
dst = np.float32([[50, 150], [50, 50], [150, 150]])
M = cv2.getAffineTransform(src, dst)
  • 1
  • 2
  • 3

仿射变换之透视变换

通过四个坐标创建透视变换矩阵

透视变换是一种投影变换,它可以将一个平面上的点映射到另一个平面上,通常用于图像的校正、变换和机器人视觉等领域。

M = cv2.getAffineTransform(srcPoints, dstPoints)
  • 1

参数说明:

  • srcPoints:一个 NumPy 数组或一个包含四个点(坐标元组)的列表,表示源坐标系中的点。这些点将被映射到目标坐标系中的对应点。

  • dstPoints:一个 NumPy 数组或一个包含四个点(坐标元组)的列表,表示目标坐标系中的点。这些点是源坐标系中相应点的映射。

返回值:

  • M:一个3x3的 NumPy 数组,表示从源坐标系到目标坐标系的仿射变换矩阵
src = np.float32([[40, 40], [140, 50], [30, 160], [150, 150]])
dst = np.float32([[0, 0], [150, 0], [0, 150], [150, 150]])
M = cv2.getPerspectiveTransform(src, dst)
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/1011916
推荐阅读
相关标签
  

闽ICP备14008679号