Как построить графику с цветами каждого пикселя на изображении? - PullRequest
0 голосов
/ 13 октября 2018

Я работаю над распознаванием цвета изображения, поэтому я конвертирую изображение RGB в Lab, потому что это наиболее близкое цветовое пространство к человеческому зрению.После этого я получаю каждый из 3 каналов лаборатории и хочу отобразить на трехмерной графике изменения цвета, которые я идентифицировал в преобразованном изображении.Как построить график с цветами изображения?

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()

Выход: enter image description here

1 Ответ

0 голосов
/ 13 октября 2018

Вот как получить ответ Александр предложил работать в вашем случае:

# 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, а не BGR OpenCV, и требователен кформа и тип цветовых данных, следовательно, их форма и деление.

Вот результат, когда код применяется к этому изображению : enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...