【问题标题】:How to plot graphics with the colors of each pixel in the image?如何用图像中每个像素的颜色绘制图形?
【发布时间】:2019-03-18 05:01:24
【问题描述】:

我正在研究图像颜色识别,因此我将 RGB 图像转换为 Lab,因为它是最接近人类视觉的颜色空间。之后,我得到 Lab 的 3 个通道中的每一个通道,我想在 3D 图形中绘制我在转换后的图像中识别的颜色变化。如何用图像的颜色绘制图形?

import cv2
import numpy as np
import urllib
import mpl_toolkits.mplot3d.axes3d as p3
import matplotlib.pyplot as plt

# Load an image that contains all possible colors.
request = urllib.urlopen('IMD021.png')
image_array = np.asarray(bytearray(request.read()), dtype=np.uint8)
image = cv2.imdecode(image_array, cv2.CV_LOAD_IMAGE_COLOR)

lab_image = cv2.cvtColor(image, cv2.COLOR_BGR2LAB)
l_channel,a_channel,b_channel = cv2.split(lab_image)

fig = plt.figure()
ax = p3.Axes3D(fig)
ax.scatter(l_channel, a_channel, b_channel, marker='o',  facecolors=cv2.cvtColor(image, cv2.COLOR_BGR2RGB).reshape(-1,3)/255.)

ax.set_xlabel('L')
ax.set_ylabel('A')
ax.set_zlabel('B')
fig.add_axes(ax)
#plt.savefig('plot-15.png')
plt.show()

退出:

【问题讨论】:

  • 所以 正在 正确地绘制它---大概你想要的只是标记颜色对应于它的位置所代表的颜色。那是对的吗?如果是这样,请参阅here
  • 是的,但是对于发送给我的链接,它使用随机颜色,我想加载图像的颜色。

标签: python python-3.x opencv image-processing graph


【解决方案1】:

这里如何让 answer Alexander 建议在您的情况下工作:

# only change to question's code is the ax.scatter() line:
ax.scatter(l_channel, a_channel, b_channel, marker='o',
  facecolors=cv2.cvtColor(image, cv2.COLOR_BGR2RGB).reshape(-1,3)/255.)

注意:facecolors 参数需要 RGB,而不是 OpenCV 的 BGR,并且对颜色数据的形状和类型很挑剔,因此需要重塑和分割。

这里是代码应用于this image:时的结果

【讨论】:

  • 简单明了。此外,用来展示这一点的照片多好啊!太统一了!我也喜欢在这里做的是将标记的不透明度和大小映射到具有该值的像素数量——通过不透明度为内部分布提供一点维度,并通过大小查看颜色的密度。并不是说这个答案需要添加,但对于任何实现演示或其他内容的人来说,这是一个不错的想法。
  • @Alexander 我根据您的建议更改了代码,更新了问题,并使用上图绘制图表。即便如此,该图仍以蓝色绘制。
  • @CarlosDiego,我得到 this colored plot 为您的问题中的图像运行更新的代码。
  • 我唯一的猜测是,旧代码(或仍包含c='b' 的代码)可能是在您生成绘图时意外运行的。但我假设你已经检查过了。
  • 我之前运行过您的代码的修订版 2(“更新的代码”)。我刚刚运行了您的代码的修订版 3,并再次获得了正确颜色的图。我的 matplotlib 版本是 2.1.2。并且对你的 fig.add_axes(ax) 进行评论可以为我摆脱 MatplotlibDeprecationWarning。
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 2020-09-07
  • 1970-01-01
  • 2022-01-10
  • 2021-04-17
  • 2014-04-18
  • 2017-09-20
  • 2019-07-24
相关资源
最近更新 更多