1

我有一个小问题。我需要使用 openCV 和 C++ 创建 BW 图像的 voronoi 图。我应该有类似 Matlab 函数 voronoin 的输出。

目标是为图表的每个区域创建一个掩码。

这是我在 Matlab 中制作的一个示例:

matlab voronoi 图

因此,对于每个区域,我应该创建一个蒙版或具有不同的颜色。我尝试了 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 );

结果如下图: voronoi labels openCV

正如您所看到的,每个区域都有不同的颜色(特别是与单元格相对应的东西),有没有办法只使用一种颜色?先感谢您

4

1 回答 1

0

如果您询问如何获得与显示标签提供的灰度值不同的颜色,一种方法(可能不是最有效的)是cv::findContours在标签图像的边缘检测图像上运行,然后遍历找到的每个轮廓并将其绘制到新图像上,它可以被填充或勾勒出来。它不是非常精确,可能会留下间隙,可能需要对边缘图像进行一些膨胀。

如果 distanceTransform 返回一个将标签图像中的强度值范围映射到具有该值的每个像素的数据结构,那将是非常好的,可能带有二进制图像的向量,其中向量中的第 n 个图像是二进制掩码一个孤立的第 n 个标签区域 - 但我认为现在这必须由用户完成。

于 2014-04-09T18:25:58.183 回答