opencv中透视变换,cv2.findHomography() 和 cv2.getPerspectiveTransform()的区别

当用于计算透视变换时,cv2.findHomography() 和cv2.getPerspectiveTransform() 之间的区别主要在于输入和输出的形式以及使用场景。

一、区别

1.输入形式:

cv2.findHomography():它接收两组匹配的点(通常是至少四对点),每组点之间对应关系已知,并且这些点不需要是矩形的四个角。这些点可以是图像中的任意四个点,因此可以用于更一般的图像配准和拼接任务。
cv2.getPerspectiveTransform():它接收源图像和目标图像中的四个点,这些点必须是矩形的四个角。这是因为透视变换需要确定的四个点来计算透视变换矩阵。

2.输出形式:

.cv2.findHomography():它返回一个 3x3 的透视变换矩阵,该矩阵描述了两个平面之间的透视变换关系。这个矩阵可以用于执行透视变换,将一个图像上的点映射到另一个图像上。
cv2.getPerspectiveTransform():它返回一个 3x3 的透视变换矩阵,该矩阵描述了一个平面上的四个点到另一个平面上的四个点之间的透视变换关系。

3.使用场景:

cv2.findHomography():由于可以接受任意的点对,因此常用于更一般的图像配准和拼接任务,比如图像拼接、图像对齐等。它可以处理任意形状的四边形,因此可以用于更复杂的变换。
cv2.getPerspectiveTransform():由于需要输入矩形的四个角点,因此主要用于进行基于矩形的透视变换,如纠正图像的倾斜、裁剪矩形区域等。
总结来说,cv2.findHomography() 更通用,可以处理任意形状的点对,而 cv2.getPerspectiveTransform() 更适用于矩形区域的透视变换。根据具体的应用场景和需求,选择适当的函数来计算和应用透视变换。

二、简单示例代码

1.使用 cv2.findHomography() 进行透视变换:

import cv2
import numpy as np

# 定义源图像和目标图像中的对应点
ptsA = np.float32([[x1, y1], [x2, y2], [x3, y3], [x4, y4]])
ptsB = np.float32([[u1, v1], [u2, v2], [u3, v3], [u4, v4]])

# 计算透视变换矩阵
H, _ = cv2.findHomography(ptsA, ptsB)

# 应用透视变换
result = cv2.warpPerspective(img, H, (width, height))

具体应用举例可以参考这篇:http://t.csdn.cn/4H8ZW

2.使用 cv2.getPerspectiveTransform() 进行透视变换:

import cv2
import numpy as np

# 定义源图像和目标图像中的四个角点
srcPoints = np.float32([[x1, y1], [x2, y2], [x3, y3], [x4, y4]])
dstPoints = np.float32([[u1, v1], [u2, v2], [u3, v3], [u4, v4]])

# 计算透视变换矩阵
M = cv2.getPerspectiveTransform(srcPoints, dstPoints)

# 应用透视变换
result = cv2.warpPerspective(img, M, (width, height))

具体应用举例可以参考这篇:http://t.csdn.cn/cQZux

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值