您现在的位置是:首页 >其他 >Python opencv 实现图像平移及旋转网站首页其他
Python opencv 实现图像平移及旋转
简介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
日常学习记录,一起交流讨论吧!侵权联系~
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。