getPerspectiveTransform通过4对点确认透视变换矩阵的原理分析

☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython

一、引言

图像透视变换(Perspective Transformation)的本质是将图像从一个几何平面投影到另一个几何平面,透视变换保证同一条直线的点还是在同一条直线上,但不再保证平行了。因为这是一个二维图像经过一个三维变换,然后映射到另外一个二维空间,二维图像的二维空间与映射后的二维空间不一样,如果一样就是仿射变换。

与《https://blog.csdn.net/LaoYuanPython/article/details/113788380 图像仿射变换原理3:仿射变换类型及变换矩阵详解》介绍仿射变换的仿射矩阵类似,透视变换也是建立在矩阵运算基础上的,通过矩阵运算可以很快的找到新旧图像的像素对应关系。

透视变换使用如下齐次坐标公式来进行描述:
在这里插入图片描述
上面的3阶方阵即为透视变换矩阵,这个矩阵是一个单应性矩阵,确定该矩阵后,新旧图像的映射关系即可确认,而在OpenCV-Python中,函

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
通过透视变换矩阵,可以将原始图像中的点映射到矫正后的图像中。具体步骤如下: 1. 使用cv2.getPerspectiveTransform()函数计算透视变换矩阵M,需要提供原始图像中的四个点和目标图像中对应的四个点。 2. 使用cv2.warpPerspective()函数将原始图像进行透视变换,得到矫正后的图像。 3. 对于需要转换的点P(x, y),将其表示为齐次坐标P' = [x, y, 1],然后通过矩阵乘法计算矫正后的点P'' = M * P'。 4. 对于矫正后的点P''(u, v, w),将其表示为非齐次坐标P(u/w, v/w)即为最终的矫正坐标。 示例代码如下: ```python import cv2 import numpy as np # 计算透视变换矩阵M src_pts = np.float32([[0, 0], [0, 100], [100, 0], [100, 100]]) dst_pts = np.float32([[0, 0], [0, 200], [200, 0], [200, 200]]) M = cv2.getPerspectiveTransform(src_pts, dst_pts) # 加载原始图像并进行透视变换 img = cv2.imread('test.jpg') img_size = (img.shape[1], img.shape[0]) warped = cv2.warpPerspective(img, M, img_size) # 转换需要矫正的点 x, y = 50, 50 P = np.float32([[x], [y], [1]]) P_ = np.dot(M, P) u, v, w = P_[0], P_[1], P_[2] x_, y_ = int(u/w), int(v/w) print('矫正前坐标:({},{}),矫正后坐标:({},{})'.format(x, y, x_, y_)) ``` 其中,src_pts为原始图像中的四个点的坐标,dst_pts为目标图像中对应的四个点的坐标,M为透视变换矩阵。在转换需要矫正的点时,需要将其表示为齐次坐标P',然后通过矩阵乘法计算P'',最后将其表示为非齐次坐标即可得到矫正后的坐标。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LaoYuanPython

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

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

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

打赏作者

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

抵扣说明:

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

余额充值