所以我一直在修改opencv,我希望能够使用相机图像来获取某些平放在平面上的对象的位置。这些对象是简单的形状,例如圆形正方形等。它们的高度相同,均为5cm。为了将现实世界的点与相机上的像素相关联,我在飞机上绘制了四个白色正方形,它们之间的距离已知。
所以我一直在采取的步骤是:
初始化:
cv::undistort
。cv::solvePnP
函数。保存rvec和tvec返回参数。查找对象,这是在初始化之后完成的:
cv::undistort
。由于对象的中心点在更高的平面上,因此我在此处进行校准,因此使用以下公式对此进行校正(d =距图像中心的像素偏移。camHeight是我通过以下方法测得的cameraHeight使用卷尺。h是物体的高度):
d = x - (h * (x / camHeight))
因此,在这里举例说明我如何获得这种配方:
但是坐标仍然不匹配...
所以我完全想知道这是否正确。具体来说,我有以下问题:
cv::undistort
之前使用cv::solvenPnP
是否正确? cv::solvePnP
还将相机校准数据作为输入,因此我不确定是否必须将未失真的图像传递给它。cv::undistort
-> cv::warpPerspective
。这是必要的吗?我是CV的新手,所以如果有什么其他完全错误的地方,也请向我指出。
感谢您阅读这段文字!