使用 EMGU 获取像素值的“真实世界”坐标

问题描述 投票:0回答:2

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

像素 -> 毫米。

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

emgucv
2个回答
1
投票

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

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

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

所有畸变系数、内在和外在校准都可以通过 Emgu.CV 中的单个函数获得:CvInvoke.CalibrateCamera 我相信,您所描述的众多可用教程之一可以很好地解释此过程.

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

成功做到这一点的关键是提供全面的

IInputArray objectPoints
IInputArray imagePoints
CvInvoke.CalibrateCamera
。一定要从许多不同的角度使用许多图像来引起“兴奋”。


0
投票

但是当我使用 CvInvoke.ProjectPoints 时,它会给我投影的 2D 坐标。请问如何使用它来获取真实的3D坐标?

© www.soinside.com 2019 - 2024. All rights reserved.