1

我正在尝试提取两个图像之间的单应矩阵。原始平面图像和包含第一个平面图像的另一个图像。我正在按照本教程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)

我得到类似的东西:

bb2

bb3

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

4

2 回答 2

0

如果我没记错的话,单应性是正确的:两个角和线的对齐是完全正确的。

当海报的角落在相机后面时会出现问题......因为它们在后面,所以点的投影没有意义:您不能投影位于负片部分的 3d 点光轴,因此绘制海报的角没有任何意义,但是单应性是正确的。

这解释了为什么在其他可以看到整个海报的图像中,我可以完美地绘制海报边框。

如果我错了请纠正我

于 2014-07-10T21:03:36.080 回答
0

当你定义你的模糊框时,你指定这些角

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)

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

于 2013-12-23T22:32:01.390 回答