【问题标题】:get the colors assigned by mayavi colormap获取由 mayavi 颜色图分配的颜色
【发布时间】:2019-11-11 15:24:20
【问题描述】:

我正在使用 mayavi,并使用 mlab.triangular_mesh 中的 scalar 属性绘制我的三角形网格

model_plot = mlab.triangular_mesh(self.model.vx, self.model.vy, self.model.vz, self.model.triv,
                                          scalars=self.P_colors[:, np.newaxis],

                                          name='model')

有了结果

但我想更改网格中的特定值(例如将头部涂成绿色)。 为此,我尝试使用图中的LOT,但我不明白如何使用它(即从标量X -> 到颜色(R,G,B,A))

model_plot.module_manager.scalar_lut_manager.lut.table = model_colors


目标是以某种方式将(7000) 标量数组转移到对应于LOT(7000,4) RGBA 数组。

【问题讨论】:

  • 这个例子有帮助吗? docs.enthought.com/mayavi/mayavi/auto/…
  • 感谢您的回答,但不,# The lut is a 255x4 array, with the columns representing RGBA 的 LUT 是 255*4(RGB 映射),我想要 7k*4 映射,即网格中每个顶点的颜色。跨度>
  • 我的理解是,每个节点都根据其在数组中的值进行着色,该数组为scalars 和所使用的颜色图。这意味着如果您保留当前颜色图,使头部的 self.P_colors 值与下腹部的值相同会使头部变为绿色。或者,如果 self.P_colors 保持不变,那么制作自己的颜色图 (matplotlib.org/3.1.1/tutorials/colors/…) 并将其提供给 colormap 可能是解决方案。
  • 你绝对正确,但如果我想在不同的软件(例如 MeshLab)中使用精确的颜色图,我想使用相同的颜色。没有办法从 LUT 创建 7000*4 颜色图吗?必须有,因为他们在内部这样做没有? (并且名称实际上是 Look Up table:p )
  • 看看这里 (matplotlib.org/3.1.0/tutorials/colors/…)、这里 (stackoverflow.com/questions/28144142/…) 和这里 (stackoverflow.com/questions/16834861/…)。对于 Mayavi 内部的内容,请尝试将 mlab.options.backend = 'envisage' 添加到您的代码中。然后,双击您感兴趣的对象的颜色和图例并尝试Launch LUT editor。它对我不起作用,但谁知道呢,也许只是我。

标签: python vtk mayavi


【解决方案1】:

最后,我找到了这个问题的解决方案。 只有2个关键点:

  • scalar

“这个标量值可以用来调制点的颜色和大小。”

  • 制作一个 RGBA LUT N*4 例如7000*4
#xyz= N*3  points
#tex = N*3  color_per_point,0~255
#tl = triangle_list of pints,  M*3

# N*4 0~255 RGBA color
color=np.hstack((tex,255.*np.ones((xyz.shape[0],1)))) 

s = np.arange(xyz.shape[0])
fig2=mlab.figure(figure="test2",fgcolor=(0., 0., 0.), bgcolor=(0, 0, 0))
mlab.figure(fig2)
mesh = mlab.triangular_mesh(xyz[:,0], xyz[:,1], xyz[:,2], tl,scalars=s,
                            representation='wireframe',
                            opacity=1)

mesh.module_manager.scalar_lut_manager.lut.number_of_colors = len(s)
mesh.module_manager.scalar_lut_manager.lut.table = color

mlab.draw()
mlab.show()

这行得通

【讨论】:

  • 这是美丽的 Eli,谢谢!,但为了与我的其他数字保持一致,我想“逆向工程” Mayavi 的调色板,即将它们的颜色作为我的标量,并且只改变一些。 (即我没有tex,只有s
【解决方案2】:

最简单的方法是从原始网格中过滤出头部,并单独绘制它,然后为其分配一个单色 LUT

【讨论】:

  • 这是一个很好的方法,但我想实际找到每个顶点的颜色,也可以用不同的软件绘制相同的图形。
猜你喜欢
  • 1970-01-01
  • 2022-06-13
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-17
  • 1970-01-01
  • 2015-07-16
相关资源
最近更新 更多