使用EMGU获取像素值的"real world"坐标

Use EMGU to get "real world" coordinates of pixel values

EMGU(OpenCV)中有很多标定棋盘相机图像的标定教程。他们最终都会对图像进行校准,然后消除失真以供显示。这很酷,但我需要在拍摄图像的地方进行机器视觉,识别图像中角或斑点或特征的位置,然后将该特征的位置(以像素为单位)转换为现实世界的 X、Y 坐标。

像素 -> 毫米

EMGU 可以吗?如果是这样,如何?我不想花很多时间学习 EMGU,然后却无法完成这个关键功能。

是的,作为 OpenCV 的“面包和黄油”当然有可能。

你所描述的校准,在消除失真方面,是这个过程的先决条件。之后,以下内容适用:

内部校准或“相机矩阵”是两个必需矩阵中的第一个。第二个是相机的外部校准,它本质上是 6 DoF 变换,它描述了传感器中心相对于坐标参考系的物理位置。

所有失真系数、内在和外在校准都可以从 Emgu.CV 中的单个函数获得:CvInvoke.CalibrateCamera 这个过程最好的解释,我敢肯定,许多您描述的可用教程。

之后,应用上述变换并从 2D 像素位置生成 3D 坐标就像 CvInvoke.ProjectPoints 一样简单。

成功做到这一点的关键是提供全面的 IInputArray objectPointsIInputArray imagePointsCvInvoke.CalibrateCamera。一定要用很多图片,从很多不同的角度来引起“兴奋”。