getAffineTransform(),getPerspectiveTransform()和findHomography()之间有什么区别?

10
我正在研究一种将图像转换并覆盖在另一幅图像轮廓内的方法。据我所知,使用Python中的OpenCV有三种方法可以实现这一点:
1. `getAffineTransform()` 2. `getPerspectiveTransform()` 3. `findHomography()`
我通过博客和SO帖子找到了三种不同的方法,它们都可以产生相同的结果,即在目标图像上对源图像进行变形/覆盖,并使其与不同形状的轮廓重合。
这是`getAffineTransform()`的演示 https://dev59.com/35jga4cB1Zd3GeqPP9fo#38323528 这是`getPerspectiveTransform()`的演示 http://uberhip.com/python/image-processing/opencv/2014/10/26/warping-brien/ 这展示了findHomography()http://www.learnopencv.com/homography-examples-using-opencv-python-c/#download。我在想什么是最好的方法以及为什么会选择其中一个而不是另一个?

意外,修复! - metersk
1
阅读文档可了解差异的提示。例如,findHomography允许您选择不同的鲁棒方法(例如RANSAC),如果您预计在点对应中有很多离群值,则非常方便。 - Micka
单就Homography和仿射变换本身而言,它们之间是有区别的。 - Optimus 1072
getPerspectiveTransform和getAffineTransform使用最少数量的点对来计算变换(4个和3个),可以完美地映射这些点。findHomography(和estimateRigidTransform)允许使用更多的点对来优化结果。 - Micka
这是一个重复的问题吗? https://dev59.com/UGgu5IYBdhLWcg3wj3z5 - BourbonCreams
显示剩余2条评论
1个回答

1

cv2.findHomography函数用于找到两个帧之间的透视变换。 cv2.warpPerspective函数将这种图像变换应用于图像。 以下是我前几天为作业编写的代码:

H, masked = cv.findHomography(src, dst, cv.RANSAC, 5.0)

dst = cv.warpPerspective(topright,H,(topleft.shape[1] + topright.shape[1], topleft.shape[0])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接