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

请添加图片描述

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WYKB_Mr_Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值