我正在使用以下代码检测图中的所有颜色:
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的矩形以仅检测其颜色(加上背景颜色),我的解决方案是:
此解决方案有效,但不是很优雅。而且,当我必须在同一图中绘制几个矩形时,它变得太慢了。
你知道是否有任何替代解决方案允许我只绘制一次矩形吗?
修改
重要提示:我忘了说当我有几个矩形时,它们可能会重叠。在这种情况下,我想只找到可见矩形的颜色。这就是我使用上面代码的原因。