【问题标题】:Use EMGU to get "real world" coordinates of pixel values使用 EMGU 获取像素值的“真实世界”坐标
【发布时间】:2020-07-02 15:56:41
【问题描述】:

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

像素 -> 毫米。

EMGU 可以做到这一点吗?如果是这样,怎么做?我不想花大量时间学习 EMGU,却无法完成这一关键功能。

【问题讨论】:

    标签: emgucv


    【解决方案1】:

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

    就消除失真而言,您所描述的校准是此过程的先决条件。之后,以下内容适用:

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

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

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

    提供全面的IInputArray objectPointsIInputArray imagePointsCvInvoke.CalibrateCamera 的关键是成功执行此操作。一定要从许多不同的角度使用许多图像来引起“兴奋”。

    【讨论】:

    • 感谢您清晰详细的解释。只要我校准,听起来 CvInvolk.ProjectPoints 完全符合我的需要。完美!
    • 确实如此 :) 良好的校准可能会很痛苦,但一旦完成,它就完成了。如果您有任何问题,请告诉我,请不要忘记投票:P
    猜你喜欢
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 2012-07-31
    • 2014-04-18
    • 2016-02-06
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    相关资源
    最近更新 更多