如何从视差图中获取三维度量值?

2024-10-01 22:36:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从视差,cv2.reprojectmageto3d获得三维度量值,使点在0,01秒,但值不是米,我的循环使它在4s(640x480显示图像)。你知道吗

for v in range(dysp.shape[0]):
        for u in range(dysp.shape[1]):
            d = dysp[v, u]
            if d > threshold:
                z = (f * b / d)  
                x = ((u - cx) * b / d - (b / 2))  
                y = (v - cy) * b / d  
                points.append([x,y,z]);

如何改进循环或将重投影3D结果转换为公制?你知道吗


Tags: in图像forthresholdif度量rangecv2
1条回答
网友
1楼 · 发布于 2024-10-01 22:36:51

在Python中,在数组上循环很慢。你必须矢量化你的代码,使之快速。你知道吗

三维点的长度单位取决于从cv2.stereoCalibrate()获得的平移向量T的长度单位,而这又取决于传递给cv2.stereoCalibrate()objectPoints的长度单位。你知道吗

cv2.reprojectImageTo3D()应该做你在循环中写的事情(除了它不减去b/2)。它将返回一个size=(480、640、3)和dtype=float32的图像。所以每个图像位置都有一个3D点。将根据cv2.reprojectImageTo3D()handleMissingValues参数处理无效的差异值(负数)。(检查视差值是否为正值)

如果视差数组的dtype=int16,则视差值被编码为固定点数,您必须将视差值除以2^N(N是小数部分的位数)。如果使用了OpenCV的BlockMatching,那么N将是4。你知道吗

相关问题 更多 >

    热门问题