Python opencv 实现图像平移及旋转

Python opencv 实现图像平移及旋转

仿射变换是一种仅在二维平面中发生的几何变形,变换之后的图像仍然可以保持直线的 “平直性” 和 “平行性”,也就是说原来的直线变换之后还是直线,平行线变换之后还是平行线。图像平移和图像旋转是常见的放射变换。

cv2.warpAffine()函数介绍

OpenCV通过cv2.warpAffine()方法实现放射变换效果,其语法如下:

dst = cv2.warpAffine(img, M, dsize)

参数

  • img ---- 代表图像 。
  • M ---- 代表一个2行3列的矩阵,根据此矩阵的值变换原图中像素的位置 。
  • dsize ----代表输出图像的尺寸大小 。
  • dst ---- 代表经过仿射变换后输出的图像。

平移

平移就是让图像中所有像素同时沿着水平或垂直方向移动。在平移的操作中,我们需要把M设置为以下格式实现平移操作。

M = [[1, 0, 水平移动的距离], [0, 1, 垂直移动的距离]]

若水平移动的距离为正数,图像会向右移动,若为复数,图像会向左移动;若垂直移动的距离为正数,图像会向下移动,若为负数,图像会向上移动。

import cv2
import numpy as np

# 读取图像
img = cv2.imread("curve.jpg")
# 获取图像的长宽和通道数
height, width, channel = img.shape
# 设置平移仿射矩阵,示例是向下平移50个像素
M1 = np.float32([[1, 0, 0], [0, 1, 50]])
# 进行仿射变换
new_img = cv2.warpAffine(img, M1, (width, height))
cv2.imwrite("down_curve.jpg", new_img)

curve.jpg

在这里插入图片描述

down_curve.jpg

请添加图片描述

旋转

图像旋转也是通过 M 矩阵来实现,但是得出这个矩阵需要复杂的运算,而OpenCV提供了getRotationMatrix2D()方法来自动计算出旋转图像的 M 矩阵,其语法如下:

 M = cv2.getRotationMatrix2D(center, angle, scale)

参数

  • center ---- 代表旋转的中心点坐标。
  • angle ---- 代表旋转的角度,正数表示逆时针旋转,负数表示顺时针旋转。
  • scale ----代表缩放比例,浮点类型。
  • M ---- 代表计算出的仿射矩阵。
import cv2
import numpy as np

# 读取图像
img = cv2.imread("curve.jpg")
# 获取图像的长宽和通道数
height, width, channel = img.shape
cx = int(width/2)
cy = int(height/2)
center = (cx, cy)
# 设置旋转仿射矩阵,示例是顺时针旋转3度
M2 =  cv2.getRotationMatrix2D(center=center, angle=-3, scale=1.0)
# 进行仿射变换
new_img = cv2.warpAffine(img, M2, (width, height))
cv2.imwrite("rot_curve.jpg", )

curve.jpg

请添加图片描述

rot_curve.jpg

请添加图片描述

日常学习记录,一起交流讨论吧!侵权联系~

猜你喜欢

转载自blog.csdn.net/WYKB_Mr_Q/article/details/130214694