【发布时间】:2019-08-11 04:40:45
【问题描述】:
我有一段代码用于可视化图表:
if (visualize == True):
# Black removed and is used for noise instead.
unique_labels = set(db.labels_)
colors = [plt.cm.Spectral(each)
for each in np.linspace(0, 1, len(unique_labels))]
for k, col in zip(unique_labels, colors):
if k == -1:
# Black used for noise.
col = [0, 0, 0, 1]
class_member_mask = (db.labels_ == k)
xy = scaled_points[class_member_mask & core_samples_mask]
plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col),
markeredgecolor='k', markersize=14)
xy = scaled_points[class_member_mask & ~core_samples_mask]
plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col),
markeredgecolor='k', markersize=6)
# display the graph
plt.title('Estimated number of clusters: %d' % n_clusters_)
plt.show()
# get the image into a variable that OpenCV likes
# uh, how?
虽然这可行,但我希望将最终结果(无论显示什么)作为 OpenCV 图像。
由于我什至没有变量-image-,我不知道如何实现这一点。
有人做过类似的事情吗?
编辑:我实际上已经接近了。现在我可以用fig 创建一个OpenCV 图像,但是内容不对。无花果是空的。我想知道我哪里错了?为什么不从上面获取plt对象并绘制实际内容?
fig = plt.figure()
canvas = FigureCanvas(fig)
canvas.draw()
# convert canvas to image
graph_image = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')
graph_image = graph_image.reshape(fig.canvas.get_width_height()[::-1] + (3,))
# it still is rgb, convert to opencv's default bgr
graph_image = cv2.cvtColor(graph_image,cv2.COLOR_RGB2BGR)
【问题讨论】:
-
OpenCV image- 你的意思是Mat吗? -
Python 没有
Mat类型变量,它在 C++ 中。它认为 Python 将图像视为数组。相应地编辑了问题标题。 -
在这里确认:stackoverflow.com/questions/7762948/… OpenCV 中的图像类型为
numpy.ndarray -
我实际上可以使用
plt.savefig('/tmp/graph' + str(self.frame_id) + ".jpg")保存图像,但我不能将它分配给变量,即numpy.ndarray。我可以每次都重新加载图像,但这太贵了 -
看起来你正在寻找Agg Buffer To Array。
标签: opencv matplotlib