如何使用OpenCV在Python中执行图像平移?

如何使用OpenCV在Python中执行图像平移?

将图像位置朝特定方向移动称为图像平移。要执行图像平移,我们首先应该了解什么是平移矩阵以及如何利用OpenCV和NumPy定义它。

如果我们想要在 (x,y) 方向偏移,偏移量分别为 (tx,ty)。其中,tx 是水平方向的偏移量,ty 是垂直方向的偏移量。使用 (tx,ty),我们可以将平移矩阵 M 定义为下面的形式 −

M = np.float32([[1,0,tx],[0,1,ty]])

平移矩阵 M 是类型为 np.float32 的 numpy 数组。我们将 M 传递给 cv2.warpAffine() 函数作为一个参数。请看以下语法 −

语法

cv2.warpAffine(img,M,(w,h))

在这里,

  • img − 要移动的图像。

  • M − 上述定义的平移矩阵。

  • (w, h) − 平移后图像的宽度和高度。

注意tx 的正值会使图像向右移,而负值会使图像向左移。同样地, ty 的 正值将使图像向下移动,而 负值将使图像向上移动。

步骤

要执行图像平移,可以按照下面的步骤进行−

导入所需的库。在下面的所有 Python 示例中,需要的 Python 库为 OpenCVNumPy。确保已经安装它。

import cv2
import numpy as np

使用 cv2.imread() 函数读取输入图像。传递输入图像的完整路径。

img = cv2.imread('interior.jpg')

定义平移矩阵 M。这里我们取 (tx,ty) = (100,50),即向右移动100个像素,向下移动50个像素。

M = np.float32([[1,0,100],[0,1,50]])

使用上述定义的平移矩阵对输入图像进行平移。

img = cv2.warpAffine(img,M,(w,h))

显示已平移的图像。

cv2.imshow('Image Translation', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

示例 1

在此示例中,我们将以水平向右100个像素和垂直向下50个像素平移输入图像。

# 导入所需的库
import cv2
import numpy as np

# 读取输入图像
img = cv2.imread('interior.jpg')

# 访问图像的高度和宽度
height, width, _ = img.shape

# 定义平移矩阵
M = np.float32([[1,0,100],[0,1,50]])

# 执行平移
img = cv2.warpAffine(img,M,(width,height))

# 显示平移后的图像
cv2.imshow('Image Translation', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出

当运行以上程序时,将生成以下输出窗口。

如何使用OpenCV在Python中执行图像平移?

示例2

在此程序中,我们执行四个不同的平移。

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

img = cv2.imread('interior.jpg')
rows,cols,_ = img.shape

M_left = np.float32([[1,0,-50],[0,1,0]])
M_right = np.float32([[1,0,50],[0,1,0]])
M_top = np.float32([[1,0,0],[0,1,50]])
M_bottom = np.float32([[1,0,0],[0,1,-50]])

img_left = cv2.warpAffine(img,M_left,(cols,rows))
img_right = cv2.warpAffine(img,M_right,(cols,rows))
img_top = cv2.warpAffine(img,M_top,(cols,rows))
img_bottom = cv2.warpAffine(img,M_bottom,(cols,rows))

plt.subplot(221), plt.imshow(img_left), plt.title('左')
plt.subplot(222), plt.imshow(img_right), plt.title('右')
plt.subplot(223), plt.imshow(img_top), plt.title('上')
plt.subplot(224), plt.imshow(img_bottom), plt.title('下')
plt.show()

输出

当你运行上面的程序时,它将产生如下输出窗口。

如何使用OpenCV在Python中执行图像平移?

请注意,第一张图显示图像向左移动了50像素,第二张图显示图像向右移动了50像素,第三张图显示图像向上移动了50像素,最后一张图显示图像向下移动了50像素。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python OpenCV