【发布时间】:2016-07-01 17:57:39
【问题描述】:
我正在尝试使用 Python 和 Mayavi 创建可视化。
该可视化的目的是在路径的不同阶段显示轨迹和相机平截头体。
我正在努力解决的问题是使用实际图像对相机平截头体多边形进行纹理化。
我愿意暂时将性能考虑放在一边,并希望找到一种方法来使用 numpy 提供的图像对 mayavi 创建的表面进行纹理处理。
找到了最有希望的建议there,但我在实施它们时无法构建表面。
def render_image(self, frustum, timestamp):
surf = mayavi.mlab.surf(frustum[0, :-1],
frustum[1, :-1],
frustum[2, :-1],
color = (1.0, 1.0, 1.0))
这是表面创建的代码,其中 numpy 数组平截头体的行分别是 x、y、z 坐标,最后一个、第五个点是金字塔的尖端,因此网格不需要。
x [-8.717184671492793, -8.623419637172622, -8.363581977642212, -8.269816943322041]
y [-4.563044562134721, -4.941612408713827, -4.37100415350352, -4.749572000082626]
z [13.614485323873417, 13.703336344550703, 14.059553426925493, 14.148404447602779]
这是一个函数输入的例子 - 四个 3D 点代表所需多边形的顶点。
然而,surf 函数在该输入上失败:
File "/usr/local/lib/python2.7/dist-packages/mayavi/tools/helper_functions.py", line 679, in __call_internal__
aspect_ratios = [(zf - zi) / (xf - xi), (zf - zi) / (yf - yi)]
ZeroDivisionError: float division by zero
注意:我可以使用 mayavi.mlab.imshow 渲染图像,但我发现根据轴角度和比例矢量指定图像姿势和大小容易出错且繁琐,因此我不愿意接受指向那个方向的答案。
非常感谢您的帮助。
【问题讨论】:
-
我建议您尝试稍微减少问题,以便您有一个更简单的示例来解决问题。如果问题的根源仍然无法解决,请完整提供数据和代码,以便人们更容易重现您的问题。这将有助于解决因版本或硬件更改而引起的问题。
-
@DebanjanBasu,谢谢。实际上,这个问题对我来说仍然很重要。我会修改问题并更新。
-
我正在尝试做同样的事情。你找到方法了吗?
-
@martinako 不。但我会尽快抽出时间再试一次,并会更新进展