#python #python-3.x #matplotlib
#python #python-3.x #matplotlib
Вопрос:
Когда я использую matplotlib.imread(), он возвращает трехмерный массив формы (497, 1248, 3)
Какие значения хранятся в этом массиве? это значения RGB пикселей на фотографии?
img = mpimg.imread("./pearlite_strain2.jpg")
Я хочу выполнить итерацию по этому массиву и сохранить расстояние между всеми пикселями, имеющими определенное значение RGB, с самой левой стороны фотографии.
как бы я это сделал?
Ответ №1:
Значения в массиве являются RGB
значениями (y, x, color)
. Массив представляет собой стандартный массив numpy, поэтому вы можете использовать argwhere
and argmax
для получения необходимой информации ( argmax
находит первое вхождение 1
or True
в логическом массиве 0
and 1
или False
and True
). Желаемые вами расстояния — это x
координаты:
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
img = np.random.randint(0, 200, (2,4,3), np.uint8)
searched = [245, 250, 255] # almost white bright pixels
img[0,2,:] = img[1,1,:] = img[1,3,:] = searched
plt.imshow(img)
all_distances = np.argwhere((img[...,:]==searched).all(2))[:,1]
# array([2, 1, 3], dtype=int64)
first_distances = np.argmax((img[...,:]==searched).all(2), axis=1)
# array([2, 1], dtype=int64)