将图像重新投影到图像中的3D相应像素(立体视觉)



我有一个视差图。

根据视差图,将鼠标悬停在"左图"上会显示:

图像的Xy,因此,如果我将鼠标悬停在最左上角,它将显示x:0, y:0

下一步是显示特定像素的距离,为了让我的生活轻松,我会尝试用reprojectImageTo3D(disp, Q)

我从stereoRectify那里得到了Q

现在,reprojectImageTo3D Python 中,返回一个n by 3矩阵。

所以我可以看到,它是一排x y z坐标。想知道,我怎么知道这些坐标对应于哪个像素?

这是我使用 numpy.savetxt 保存的 3D 点的示例

http://pastebin.com/wwDCYwjA

顺便说一句:我正在用python做所有事情,但是Java中的GUI,我没有时间在python中学习GUI。

如果正确计算视差图,则应得到 (n1,n2,1) 维数组,其中 n1,n2 - 按轴计算的图像像素数,1 - 通道数(单通道,包含与左右图像的相应像素之间的像素距离)。您应该通过键入 disp.shape 来检查这一点。之后,您应该将视差图的 ndarray 传递给函数reprojectImageTo3D并获取 ndarray,它具有 (n1,n2,3) 形状(第三维包含 3D 点的 X,Y,Z 坐标)。您可以通过键入以下内容来检查:

threeDImage = reprojectImageTo3D(disp, Q)
print threeDImage.shape
最后,由于您基于左图制作视差图,

因此每个像素(在左图(或视差图)上具有坐标 x,y 对应于 threeDImage[x][y] 3D 点。请记住,该行:0,列:0是矩阵的左上角元素,基于 OpenCV 处理图像:

0/0---column--->
 |
 |
row
 |
 |
 v

最新更新