我正在尝试提取两个图像之间的单应性矩阵。原始平面图像和包含第一个图像的另一个图像。我正在按照本教程https://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_feature2d/py_feature_homography/py_feature_homography.html#feature-homography中的步骤进行操作。

找到的匹配项看起来不错,但是在绘制包含图像的框时看起来不对,因为它不包含图像...但是其中一个边框还可以...所以这是怎么回事?单应性矩阵是错误的还是仅仅是可视化问题?

我的代码如下:

M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC,5.0)
matchesMask = mask.ravel().tolist()

h,w = self.poster_original.shape
pts = np.float32([ [0,0],[w-1,h-1],[w-1,0],[0,h-1]]).reshape(-1,1,2)
dst = cv2.perspectiveTransform(pts,M)
self.undistorted_camera_image= cv2.polylines(self.undistorted_camera_image,[np.int32(dst)],True,255,3, cv2.LINE_AA)

编辑:
将角点顺序更改为:
pts = np.float32([ [0,0],[0,h-1],[w-1,h-1],[w-1,0] ]).reshape(-1,1,2)

我得到类似的东西:



看起来有些不同,但仍然不是我所期望的。

最佳答案

定义组合框时,请指定这些角

pts = np.float32([ [0,0],[w-1,h-1],[w-1,0],[0,h-1]]).reshape(-1,1,2)

但该示例使用
pts = np.float32([ [0,0],[0,h-1],[w-1,h-1],[w-1,0] ]).reshape(-1,1,2)

他们将形成一个正方形(左上->左下->右下->右上),您的将形成其他形状(左上->右下->右上->左下) )。

关于python - Opencv:好的点匹配,但单应性错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20751746/

10-10 04:17