Python 如何从视差图中获取3d度量值?

Python 如何从视差图中获取3d度量值?,python,opencv,3d,Python,Opencv,3d,我需要从视差cv2中获取3d度量值。重投影3d以0,01秒为单位生成点,但值不是以米为单位,我的循环以4s640x480显示图像为单位 对于范围内的v。形状[0]: 对于范围内的u形[1]: d=呼吸困难[v,u] 如果d>阈值: z=f*b/d x=u-cx*b/d-b/2 y=v-cy*b/d 点。追加[x,y,z]; 如何改进循环或将重投影3D结果转换为公制?在Python中,在数组上循环很慢。您必须对代码进行矢量化,以加快速度 3D点的长度单位取决于从cv2.stereoCalibrat

我需要从视差cv2中获取3d度量值。重投影3d以0,01秒为单位生成点,但值不是以米为单位,我的循环以4s640x480显示图像为单位

对于范围内的v。形状[0]: 对于范围内的u形[1]: d=呼吸困难[v,u] 如果d>阈值: z=f*b/d x=u-cx*b/d-b/2 y=v-cy*b/d 点。追加[x,y,z];
如何改进循环或将重投影3D结果转换为公制?

在Python中,在数组上循环很慢。您必须对代码进行矢量化,以加快速度

3D点的长度单位取决于从cv2.stereoCalibrate获得的平移向量T的长度单位,而平移向量T又取决于传递给cv2.stereoCalibrate的对象点的长度单位

cv2.reprojectomageto3d应该执行您在循环中编写的操作,但它不会减去b/2。它将返回一个大小分别为480、640、3和dtype=float32的图像。因此,每个图像位置都有一个3D点。无效的差异值负数将根据cv2.reprojectImageTo3D的handleMissingValues参数进行处理。检查视差值是否为正值


如果视差数组的dtype=int16,视差值将被编码为固定点数,您必须将视差值除以2^N N是小数部分的位数。如果使用OpenCV的块匹配,矢量化后N将为4。

我的方式:480,640,3次=46.88毫秒重新投影480,640,3次=15.62毫秒。比以前快了近100倍。谢谢您的回答。