что возвращает matplotlib.imread()? как выполнить итерацию для фильтрации определенных пикселей?

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

введите описание изображения здесь