Как обнаружить все подключенные соседние пиксели, имеющие одинаковое значение цвета в opencv

Я должен быть в состоянии ввести положение пикселя и получить все цветные (в моем случае это должны быть черные) пиксели, которые связаны с ним. Как это сделать в opencv с c ++. Просто выходные пиксели должны быть связаны друг с другом черным цветом. Метод FindContours () не работает, так как его нельзя передать пикселем.

0

Решение

OpenCV не имеет такой функции, поэтому вам придется реализовать ее самостоятельно. Простой способ — реализовать алгоритм поиска, такой как BFS или DFS, в деревьях.

сом псевдокод:

list<pixels> pixels_in_component;
stack<pixels> neighbours;
neighbours.add(starting_point)

while not neightbours.empty:
p = neighbours.pop();
pixels_in_component.append(p)
for each adjacent pixel n of p:
if color(n) == color(starting_point):
neighbours.append(n)

Если вы используете стек или очередь неактуальна, апиксель_ин_компонента позже будет содержать все подключенные пиксели.

Или (если вы ограничены черными компонентами) вы можете использовать cv :: Threshold, чтобы инвертировать ваше изображение. Просто используйте инвертированный двоичный порог, где все пиксели выше определенного значения отображаются в ноль, а пиксели ниже порога отображаются в данное значение.

Если у вас есть изображение CV_8UC1, вы можете просто позвонить
порог (вход, выход, 1255, THRESH_BINARY_INV);

отобразить черные пиксели на 255, а остальные на ноль. Тогда вы можете просто запустить обычный findContours.

3

Другие решения

Вы должны просто использовать заливка.

Вот Вы можете найти подробное объяснение того, как получить двоичное изображение со всеми пикселями, подключенными к вашей начальной точке.

3

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector