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