【发布时间】:2020-07-02 15:56:41
【问题描述】:
有许多校准教程可以在 EMGU (OpenCV) 中校准棋盘的相机图像。它们最终都会校准并消除图像失真以供显示。这很酷,但我需要在拍摄图像时进行机器视觉,识别图像中角落或斑点或特征的位置,然后将该特征的位置(以像素为单位)转换为真实世界的 X、Y 坐标。
像素 -> 毫米。
EMGU 可以做到这一点吗?如果是这样,怎么做?我不想花大量时间学习 EMGU,却无法完成这一关键功能。
【问题讨论】:
标签: emgucv
有许多校准教程可以在 EMGU (OpenCV) 中校准棋盘的相机图像。它们最终都会校准并消除图像失真以供显示。这很酷,但我需要在拍摄图像时进行机器视觉,识别图像中角落或斑点或特征的位置,然后将该特征的位置(以像素为单位)转换为真实世界的 X、Y 坐标。
像素 -> 毫米。
EMGU 可以做到这一点吗?如果是这样,怎么做?我不想花大量时间学习 EMGU,却无法完成这一关键功能。
【问题讨论】:
标签: emgucv
是的,它当然可以作为 OpenCV 的“面包和黄油”。
就消除失真而言,您所描述的校准是此过程的先决条件。之后,以下内容适用:
内在校准或“相机矩阵”是两个必需矩阵中的第一个。第二个是相机的外部校准,它本质上是描述传感器中心相对于坐标参考系的物理位置的 6 DoF 变换。
所有失真系数、内在和外在校准都可以通过 Emgu.CV 中的单个函数获得:CvInvoke.CalibrateCamera 我敢肯定,您所描述的众多可用教程之一最好地解释了这个过程.
之后,就像CvInvoke.ProjectPoints 一样简单地应用上述变换并从 2D 像素位置生成 3D 坐标。
提供全面的IInputArray objectPoints 和IInputArray imagePoints 到CvInvoke.CalibrateCamera 的关键是成功执行此操作。一定要从许多不同的角度使用许多图像来引起“兴奋”。
【讨论】: