用OpenCV的distanceTransform函数作图像的距离变换

来源:互联网 发布:李俊峰的霍去病 知乎 编辑:程序博客网 时间:2024/05/16 12:49

本文转载自 http://opencv66.net/thread-20-1-1.html

距离变换运算用于二值化图像中的每一个非零点距自己最近的零点的距离,距离变换图像上越亮的点,代表了这一点距离零点的距离越远。
距离变换通常用于细化字符的轮廓和查找物体的质心(中心)。
OpenCV提供了distanceTransform函数用于计算二值化图像的距离变换。
这个函数的原型如下
C++: void distanceTransform(InputArray src, OutputArray dst, int distanceType, int maskSize, int dstType=CV_32F )
C++: void distanceTransform(InputArray src, OutputArray dst, OutputArray labels, int distanceType, int maskSize, int labelType=DIST_LABEL_CCOMP )
参数意义如下
src:源矩阵
dst:目标矩阵
distanceType:距离类型。可以的类型是CV_DIST_L1、CV_DIST_L2、CV_DIST_C,具体各类型的意义,请查阅相关算法文档。
maskSize:距离变换运算时的掩码大小。值可以是3、5或CV_DIST_MASK_PRECISE(5或CV_DIST_MASK_PRECISE只能用在第一个原型中)。当distanceType=CV_DIST_L1 或 CV_DIST_C时,maskSize只能为3。
dstType:输出图像(矩阵)的类型,可以是CV_8U 或 CV_32F。CV_8U只能用在第一个原型中,而且distanceType只能为CV_DIST_L1。
labels:输出二维阵列标签。(这是啥意思?抱歉,我也不知道,等以后知道了再来补充)
labelType:标签数组类型。可选值为DIST_LABEL_CCOMP和DIST_LABEL_PIXEL,具体各是什么含义,我现在也不清楚,等以后清楚了再来补充。
我们通常使用的是这个函数的第一个原型,所以对于参数“labels”和“labelType”,我们可以暂时不管。
使用distanceTransform函数进行距离变换的示例代码如下
下面这段代码的作用是查询物体的质心位置。
代码如下
源代码请大家访问原帖查看,原帖链接 http://opencv66.net/thread-20-1-1.html

源代码请大家访问原帖查看,原帖链接 http://opencv66.net/thread-20-1-1.html

源代码请大家访问原帖查看,原帖链接 http://opencv66.net/thread-20-1-1.html
运行结果截图如下


本文转载自 http://opencv66.net/thread-20-1-1.html

阅读全文
0 0