2013-03-20 79 views
1

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

目标是为图的每个区域创建一个遮罩。

这是我在Matlab制成一个例子:

matlab voronoi diagram

所以,对于各区域I应该创建掩模或具有不同的颜色。 我尝试了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

,你可以在每个区域看到有型动物的颜色(尤其是有东西在对应的单元格),有没有办法有只是一种颜色? 预先感谢您

回答

0

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

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