在matplotlib

时间:2017-02-06 11:17:23

标签: python matplotlib colors

我正在使用以下代码检测图中的所有颜色:

import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
import numpy as np


# Plot the rectangle:

fig = plt.figure(figsize=(7, 7), facecolor='white')
ax = fig.add_subplot(111, aspect='equal')
ax.add_patch(Rectangle((0.5, 0.5), 0.1, 0.1, fc=[1,0,0], ec='none'))
ax.axis([0, 1, 0, 1])
ax.axis('off')
fig.canvas.draw()


# Save data in a rgb string and convert to numpy array:

rgb_data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')
rgb_data = rgb_data.reshape((int(len(rgb_data)/3), 3))


# Print only unique colors:

rgb_data = np.vstack(set(tuple(row) for row in rgb_data))
print rgb_data


# Show the figure:

plt.show()

在此示例中,我在白色背景上绘制一个红色矩形,代码返回颜色[255 0 0](红色)和[255 255 255](白色)。只要edgecolor ec设置为'none',代码就能很好地运行。相反,当我设置ec='black'时,代码会返回一些虚假的颜色,例如[247 247 247][8 6 6]等。因为我想绘制带有边缘AND的矩形以仅检测其颜色(加上背景颜色),我的解决方案是:

  1. 在没有边缘的情况下绘制一次
  2. 检测其颜色
  3. 删除图
  4. 使用边缘再次绘制
  5. 此解决方案有效,但不是很优雅。而且,当我必须在同一图中绘制几个矩形时,它变得太慢了。

    你知道是否有任何替代解决方案允许我只绘制一次矩形吗?

    修改

    重要提示:我忘了说当我有几个矩形时,它们可能会重叠。在这种情况下,我想只找到可见矩形的颜色。这就是我使用上面代码的原因。

0 个答案:

没有答案