У меня небольшая проблема. Мне нужно создать диаграмму вороного изображения BW, используя openCV и C ++. У меня должно быть что-то вроде вывода функции Matlab voronoin.
Цель состоит в том, чтобы создать маску для каждой области диаграммы.
Вот пример, который я сделал в Matlab:
Итак, для каждого региона я должен создать маску или иметь другой цвет.
Я пробовал openCV функцию distanceTransform, чтобы получить метки voronoi.
Mat bwCoresGoodInv = 255 - bwCoresGood;
distanceTransform(bwCoresGoodInv, distTr,voronoiLabels, CV_DIST_L2, CV_DIST_MASK_PRECISE, DIST_LABEL_PIXEL);
namedWindow( "voronoiDistLab", CV_WINDOW_AUTOSIZE );
voronoiLabels = voronoiLabels*5;
imshow( "voronoiDistLab", voronoiLabels );
В результате получается следующее изображение:
вороной этикетки openCV
как вы можете видеть в каждой области есть разные цвета (в частности, есть что-то в соответствии с ячейкой), есть ли способ иметь только цвет?
заранее спасибо
Если вы спрашиваете, как получить цвета, отличные от значений серой шкалы, предоставляемых отображением меток, один из подходов (возможно, не самый эффективный) состоит в cv::findContours
на обнаруженном краем изображении метки, а затем переберите каждый найденный контур и нарисуйте его на новом изображении, его можно заполнить или очертить. Он не очень точный и может оставить зазоры, может потребоваться некоторое расширение изображения края.
Было бы очень хорошо, если бы distanceTransform возвращал структуру данных, которая отображала диапазон значений интенсивности в изображении метки на каждый пиксель, который имеет это значение, возможно, с вектором двоичных изображений, где n-е изображение в векторе является двоичной маской с изолированный n-ный регион метки — но я думаю, что сейчас это должно быть сделано пользователем.
Других решений пока нет …