opencv inRange позиция пикселя - PullRequest
0 голосов
/ 01 ноября 2018

Мне нужно получить несколько пикселей, которые находятся в диапазоне значений цвета RGB

Я использую функцию inRange:

 mask = cv2.inRange(image, lower, upper)

Теперь я получаю эту маску и мне нужно выполнить некоторые операции с этими отфильтрованными пикселями - то есть найти расстояние между двумя случайными пикселями

Как я могу это сделать?

Если я позвоню print(image), я получу следующий массив:

[[[ 78  94 107]
[ 82  97 113]
[ 87 102 118]
...
[101 114 116]
[108 120 122]
[109 121 123]]

Как я понимаю, это массив, где ключи - это координаты x и y, а значение - код RGB. Но если я позвоню print(mask.nonzero()) я увижу

(array([126, 126, 126, ..., 168, 168, 168], dtype=int64),...)

И я действительно не понимаю, что находится в этом массиве, и в документах я не нашел тип возвращаемого значения

1 Ответ

0 голосов
/ 01 ноября 2018

Поскольку mask является 2-мерным массивом, метод numpy.nonzero(..) вернет 2-кортеж, первый элемент - это массив индексов первой координаты, ненулевой, а второй кортеж является массивом индексов второй координаты, отличной от нуля.

Вы можете np.transpose(..), чтобы получить n & times; 2 матрицу с двумя координатами пикселя, которые не равны нулю, для каждой строки, поэтому :

print(<b>np.transpose(</b>mask.nonzero()<b>)</b>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...