OpenCV--距离变换distanceTransform

原理

距离变换的定义是计算一个图像中非零像素点到最近的零像素点的距离,也就是到零像素点的最短距离。
距离变换的处理图像通常都是二值图像,而二值图像其实就是把图像分为两部分,即背景和物体两部分,物体通常又称为前景目标!通常我们把前景目标的灰度值设为255,即白色,背景的灰度值设为0,即黑色。所以定义中的非零像素点即为前景目标,零像素点即为背景。所以图像中前景目标中的像素点距离背景越远,那么距离就越大,如果我们用这个距离值替换像素值,那么新生成的图像中这个点越亮。
OpenCV--距离变换distanceTransform_第1张图片
由于伸出的手指相对于手掌来说比较细(如下图“src”窗口图像所示),也就是说手指上的像素距离零像素距离很短,所以经过距离变换后的图像在手指部位的像素值较小(dst),通过设定合理的阈值对距离变换后的图像进行二值化处理,则可得到去除手指的图像(bidist),手掌重心即为该图像的几何中心。
原理引用

API

distanceTransform(src, distanceType, maskSize, dst=None, dstType=None, /) -> dst
src:输入的图像,一般为二值图像
distanceType:所用的求解距离的类型,有CV_DIST_L1, CV_DIST_L2 , or CV_DIST_C
mask_size:距离变换掩模的大小,可以是 3 或 5。对 CV_DIST_L1 或 CV_DIST_C 的情况,参数值被强制设定为 3, 因为 3×3 mask 给出 5×5 mask 一样的结果,而且速度还更快。
参数设定
因为distanceTransform返回的图像数据是浮点数值,要想在浮点数表示的颜色空间中,数值范围必须是0-1.0,所以要将其中的数值进行归一化处理。

你可能感兴趣的:(OpenCV,opencv)