OpenCV 中的相机标定和鸟瞰图投影
camera calibration and Bird's Eye Projection in OpenCV
我已经完成了相机校准。现在我想获得棋盘 picture.As 的鸟瞰图,如下所示。但是结果很奇怪,好像没有一个square.You可以看出pic3.Every的正方形是7.95x7.95。 smoebody 知道为什么吗?
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 中,我为您的图像添加了一些标记。
轮廓(绿点)是从一个角到下一个角的单条直线。如您所见,它们很好地位于图案底座的边界上,这表明您的图像中没有太多镜头失真。
另一方面,顶部的红线由单线段组成,始终连接两个相邻的角。如您所见,在第 2 和第 3 条线段中有一个重要的 "bend",因此整个图案上没有直线。
底部的红线(细)是从图案的一侧到另一侧的直线,正如您所看到的那样,有些部分在线的两侧都有白色像素。所以你的图案在图像中看起来不是直的。
我猜你的图案制作得不好,但这只是一个猜测,最后它也可能是一些奇怪的镜头行为。您可以从不同的视图(相同的相机焦点等,如果可能的话)捕获相同图案的图像以进一步分析。
如 user3896254 (thx) 所述,不同的错误可能会因透视变形而被强烈放大。测量(或手动标记)错误(即使是亚像素精度)可能是另一个问题。
我已经完成了相机校准。现在我想获得棋盘 picture.As 的鸟瞰图,如下所示。但是结果很奇怪,好像没有一个square.You可以看出pic3.Every的正方形是7.95x7.95。 smoebody 知道为什么吗?
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 中,我为您的图像添加了一些标记。
轮廓(绿点)是从一个角到下一个角的单条直线。如您所见,它们很好地位于图案底座的边界上,这表明您的图像中没有太多镜头失真。
另一方面,顶部的红线由单线段组成,始终连接两个相邻的角。如您所见,在第 2 和第 3 条线段中有一个重要的 "bend",因此整个图案上没有直线。 底部的红线(细)是从图案的一侧到另一侧的直线,正如您所看到的那样,有些部分在线的两侧都有白色像素。所以你的图案在图像中看起来不是直的。
我猜你的图案制作得不好,但这只是一个猜测,最后它也可能是一些奇怪的镜头行为。您可以从不同的视图(相同的相机焦点等,如果可能的话)捕获相同图案的图像以进一步分析。
如 user3896254 (thx) 所述,不同的错误可能会因透视变形而被强烈放大。测量(或手动标记)错误(即使是亚像素精度)可能是另一个问题。