简介:仿射变换是图像处理中常见的一种操作,包括平移、旋转和缩放等。在OpenCV中,可以使用getAffineTransform函数和warpAffine函数实现仿射变换。本文将详细介绍如何使用这两个函数实现平移、旋转和缩放操作。
在图像处理中,仿射变换是一种常见的操作,包括平移、旋转和缩放等。在OpenCV中,我们可以使用getAffineTransform函数和warpAffine函数来实现仿射变换。这两个函数都需要一个仿射变换矩阵作为参数,该矩阵表示了图像坐标和原始坐标之间的关系。
首先,我们需要了解如何计算仿射变换矩阵。对于平移、旋转和缩放这三种变换,都可以用一个3x3的仿射变换矩阵来表示。具体来说,平移变换可以用一个对角线为1,其它元素为0的矩阵来表示;旋转和缩放变换则需要使用一个非对角线元素不为0的矩阵。
接下来,我们可以通过调用getAffineTransform函数来计算仿射变换矩阵。该函数接受原始坐标点和目标坐标点作为输入,并返回一个3x3的矩阵。这个矩阵就是我们需要使用的仿射变换矩阵。
然后,我们可以使用warpAffine函数来对图像进行仿射变换。该函数接受一个输入图像、仿射变换矩阵和输出图像大小作为参数,并返回一个输出图像。在调用该函数时,我们需要将输入图像、仿射变换矩阵和输出图像大小传递给它,然后它将返回一个输出图像,该图像是输入图像经过仿射变换后的结果。
下面是一个简单的示例代码,演示如何使用OpenCV实现平移、旋转和缩放操作:
```python
import cv2
import numpy as np
img = cv2.imread(‘input.jpg’)
M_translate = np.float32([[1, 0, 100], [0, 1, 50]]) # 右移100像素,下移50像素
translated_img = cv2.warpAffine(img, M_translate, (img.shape[1], img.shape[0])) # 执行平移变换
M_rotate = cv2.getRotationMatrix2D((img.shape[1]/2, img.shape[0]/2), 45, 1) # 顺时针旋转45度
rotated_img = cv2.warpAffine(img, M_rotate, (img.shape[1], img.shape[0])) # 执行旋转变换
M_scale = np.float32([[0.8, 0, 0], [0, 0.8, 0]]) # 缩小为原来的80%
scaled_img = cv2.warpAffine(img, M_scale, (int(img.shape[1]0.8), int(img.shape[0]0.8))) # 执行缩放变换
cv2.imshow(‘Original Image’, img)
cv2.imshow(‘Translated Image’, translated_img)
cv2.imshow(‘Rotated Image’, rotated_img)
cv2.imshow(‘Scaled Image’, scaled_img)
cv2.waitKey(0)
cv2.destroyAllWindows()