【opencv 学习】仿射变换(图像的旋转、缩放、平移)

请添加图片描述

import numpy as np
import cv2

# 仿射变换的两种方式:
#     1、利用变换前后的三个坐标点达到变换目的。
#     2、使用旋转角度和缩放倍数来变换。
# 可以用矩阵相乘或者向量叠加到矩阵表示的所有操作(旋转、平移(向量叠加)、缩放),这个就是类似于一个矩阵的变换。图像本身就是一个矩阵

img = cv2.imread(r'images/build.jpeg', 1)
rows, cols, channels = img.shape  # h,w,c

# 第一部分:利用变换前的点和变换后的点求出仿射变换矩阵
p1 = np.float32([[0, 0], [cols - 1, 0], [0, rows - 1]])  # 原图像的点的集合
p2 = np.float32([[0, rows * 0.3], [cols * 0.45, rows * 0.25], [cols * 0.15, rows * 0.58]])  # 变换后的图像的点的集合

M = cv2.getAffineTransform(p1, p2)  # 仿射变换矩阵
img_rotated_by_points = cv2.warpAffine(img, M, dsize=(cols, rows))  # M 就是仿射变换矩阵, dsize就是原始图像size


# 第二部分:利用旋转角度和缩放比例来求出仿射变换矩阵
center = (cols / 4, rows / 4)  # 这个点就是未来的平移点
rot_mat = cv2.getRotationMatrix2D(center=center, angle=-35, scale=0.5)  # 中心点,旋转角度,缩放比例
img_rotated_by_alpha = cv2.warpAffine(img, rot_mat, (cols, rows))


res = np.hstack((img, img_rotated_by_points, img_rotated_by_alpha))
cv2.imshow('img', res)
cv2.waitKey(0)
cv2.destroyAllWindows()




效果如下:
请添加图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值