Я должен быть в состоянии ввести положение пикселя и получить все то же цветное (в моем случае оно должно быть черным) пиксели, которые подключены к нему. Как это сделать в opencv с C++. Просто выходные пиксели должны быть связаны друг с другом цветным цветом. Метод FindContours() не работает, поскольку он не может быть загружен пикселем.Как обнаружить все связанные соседние пиксели с одинаковым значением цвета в opencv
ответ
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)
Если вы используете стек или очередь не имеет отношения и pixels_in_component позже содержат все, что вам связные пиксели.
Или (если вы ограничены черными компонентами), вы можете использовать cv :: Threshold для инверсии изображения. Просто используйте инвертированный двоичный порог, где все пиксели выше определенного значения отображаются на ноль, а пиксели ниже порога отображаются на заданное значение.
Если у вас есть изображение CV_8UC1, вы можете просто вызвать порог (вход, выход, 1,255, THRESH_BINARY_INV);
чтобы отобразить черные пиксели до 255, а остальные - к нулю. Затем вы можете просто запустить обычный findContours.
Спасибо. Через простой метод заливки (1-й вариант) мы можем изменить цвет только подключенных компонентов. Это не возвращает, какие пиксели подключены. Поэтому я все еще думаю, что это не прямой ответ, а обходной путь. Я предполагаю, что вы предлагаете использовать второй вариант метода floodFill, который включает параметр маски. Но имеет ли эта маска также информация о том, какие пиксели связаны? (или мне нужно вручную найти, какие пиксели заполнены определенным цветом) –
@SamithaChathuranga Проверьте также этот http://stackoverflow.com/q/28364678/2436175. Как вы хотите свой выход? Вектор вектора точек? Вектор двоичных изображений, где каждое бинарное изображение представляет собой одну метку? – Antonio