当前位置:   article > 正文

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

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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

具体应用举例可以参考这篇: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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/153401
推荐阅读
相关标签
  

闽ICP备14008679号