根据我的理解,undistortPoints在失真的图像上获取一组点,并计算其坐标在同一图像的未失真版本上的位置。同样,projectPoints将一组对象坐标映射到其相应的图像坐标。
但是,我不确定projectPoints是否将对象坐标映射到变形图像(即原始图像)或未变形的图像点(直线)上的一组图像点?
此外,undistortPoints的OpenCV文档指出“该函数执行对projectPoints()的反向转换”。您能解释一下这是怎么回事吗?
最佳答案
从3.2文档引用 projectPoints()
:
您有参数distCoeffs
:
在不失真的情况下,等式为:
使用K
固有矩阵,使用[R | t]
外部矩阵或将对象或世界框架中的点转换为摄影机框架的转换。
对于 undistortPoints()
,您具有参数R:
反向变换是一种操作,您可以使用固有参数为2D图像点([u, v]
)计算归一化相机帧([x, y, z=1]
)中的相应3D点。
使用外部矩阵,您可以在相机框架中获得该点:
归一化的相机框架是通过除以深度获得的:
假设没有失真,则图像点为:
而“逆变换”假设没有失真:
关于opencv - OpenCV中undistortPoints()和projectPoints()之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42361959/