opencv - 在 OpenCV 中查找像素的世界空间坐标

标签 opencv image-processing 3d 2d

我需要使用 OpenCV 找到像素的世界坐标。因此,当我在我的图像(即左上角)中获取像素 (0,0) 时,我想知道该像素对应于我的图像平面上的 3D 世界空间坐标。我知道单个像素对应于世界空间中的一行 3D 点,但我想要特定于图像平面本身的像素。

这是 OpenCV 针孔模型的公式,我有第一个(内部)和第二个(外部)矩阵。我知道我有 u 和 v,但我不知道如何从这个 u 和 v 得到正确的 X、Y 和 Z 坐标。

Pinhole Model Opencv

我已经尝试过的:

  • 我想将 s 设置为 1,然后通过添加 1 从 [u v 1]^T 生成齐次坐标,如下所示:[u v 1 1]^T。然后我将内在函数与外在函数相乘,并通过添加以下行将其制成 4x4 矩阵:[0 0 0 1]。然后将其倒置并与 [u v 1 1]^T 相乘以获得我的 X、Y 和 Z。但是当我检查四个像这样计算的像素是否位于同一平面(图像平面)上时,这是错误的。<

那么,有什么想法吗?

最佳答案

IIUC 你想要 I 与从相机中心反向投影给定像素 P 的光线的图像平面的交点。

让我们先定义坐标系。通常的 OpenCV 约定如下:

  • 图像坐标:原点在左上角,u 轴向右(增加列)和 v 轴向下。
  • 相机坐标:原点在相机中心 C,z 轴朝向场景,x 轴向右,y 轴向下。

然后相机框架中的图像平面为 z=fx,其中 fx 是以像素为单位测量的焦距,像素 (u, v) 具有相机坐标 (u - cx ,v - cyfx)。

将它们乘以(固有)相机矩阵 K 的倒数,您将在相机坐标系中得到相同的点。

最后,将其乘以世界到相机坐标变换的倒数 [R | t] 并且您将在世界坐标中得到相同的点。

关于opencv - 在 OpenCV 中查找像素的世界空间坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28011873/

相关文章:

android - OpenCV 未定义引用

Python OpenCV Stitcher 类文档

opencv - 使用 OpenCV 进行基于特征检测的定位

opencv - OpenCV cv::resize()可以更改图像的最小值和最大值吗? (使用INTER_LINEAR方法)

math - 如何在大致等距的 D 维球面上绘制 N 个点?

actionscript-3 - 导入3D补间动画片段时出现Flash AS3错误

opencv - Python OpenCv cv2 等效于 CV_FILLED

image-processing - opencv形态膨胀过滤器作为最大过滤器

image - 将图片读取为灰度numpy数组,并保存回来

用于查找 3D 空间中线和点之间距离的 Java 代码