我需要从视差,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结果转换为公制?你知道吗
在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。你知道吗
相关问题 更多 >
编程相关推荐