我已经完成了相机校准。现在我想获得棋盘图片的鸟瞰图。如下所示。但结果很奇怪,看起来不是一个正方形。你可以看到图3。每个正方形都是7.95x7.95。有人知道为什么吗?
gpsPoints[0] = Point2f(..., ...);
gpsPoints[1] = Point2f(..., ...);
gpsPoints[2] = Point2f(..., ...);
gpsPoints[3] = Point2f(..., ...);
dst[0] = Point2f(..., ...);
dst[1] = Point2f(..., ...);
dst[2] = Point2f(..., ...);
dst[3] = Point2f(..., ...);
Mat transmtx = getPerspectiveTransform(gpsPoints, dst);
warpPerspective(img, frame, transmtx, img.size());
一般来说,单应性会将直线转换为直线。
由于您只提供了 4 个角,因此透视变换是唯一定义的。因此,如果您确实选择了正确的 4 个角,但图案中的某个位置存在错误的结构,那么这些结构在输入图像中肯定已经是错误的。
在您的场景中,这可能是由于镜头畸变而发生的,因此现实中的直线在(输入)图像中看不到直线。或者输入图像中的线条在现实世界中并不笔直,例如您的图案底座不是完全平坦的,或者您的图案没有很好地粘合在平面上。
在 GIMP 中,我向您的图像添加了一些标记。
轮廓(绿点)是从一个角到下一个角的单直线。正如您所看到的,它们很好地位于图案底座的边界上,这暗示图像中没有太多镜头畸变。
另一方面,顶部的红线由单线段组成,始终连接两个相邻的角。正如您所看到的,第二条和第三条线段有明显的“弯曲”,因此整个图案上没有直线。
底部的红线(细)是从图案的一侧到另一侧的直线,您可以看到线条两侧有一些白色像素的部分。所以你的图案在图像中看起来并不直。
我猜你的图案制作得不好,但这只是一个猜测,最终也可能是一些奇怪的镜头行为。您可以从不同的视图(相同的相机焦点等,如果可能)捕获相同图案的图像以进一步分析。
正如 user3896254 (thx) 所说,透视扭曲可能会严重放大不同的错误。测量(或手动标记)错误(即使是亚像素精度)可能是另一个问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)