[OpenCV] 图像分割之利用 cv2.distanceTransform 提取前景

提取硬币前景

当图像内的各个子图没有连接时,可以直接使用形态学的腐蚀操作确定前景对象,但是如果图像内的子图连接在一起时,就很难确定前景对象了。此时,借助于距离变换函数 cv2.distanceTransform()可以方便地将前景对象提取出来。
距离变换函数 cv2.distanceTransform()计算二值图像内任意点到最近背景点的距离。一般情况下,该函数计算的是图像内非零值像素点到最近的零值像素点的距离,即计算二值图像中所有像素点距离其最近的值为 0 的像素点的距离。当然,如果像素点本身的值为 0,则这个距离也为 0。
距离变换函数 cv2.distanceTransform()的计算结果反映了各个像素与背景(值为 0 的像素点)的距离关系。通常情况下:
如果前景对象的中心(质心)距离值为 0 的像素点距离较远,会得到一个较大的值。
如果前景对象的边缘距离值为 0 的像素点较近,会得到一个较小的值。
如果对上述计算结果进行阈值化,就可以得到图像内子图的中心、骨架等信息。距离变换函数 cv2.distanceTransform()可以用于计算对象的中心,还能细化轮廓、获取图像前景等,有多种功能。
以上内容摘自《OpenCV轻松入门》

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt

img = cv.imread('coin.jpg', cv.IMREAD_GRAYSCALE)
_ret, img2 = cv.threshold(img, 0, 255, cv.THRESH_BINARY_INV + cv.THRESH_OTSU)
kernel = np.ones((3, 3), np.uint8)
opn = cv.morphologyEx(img2, cv.MORPH_OPEN, kernel)
distance = cv.distanceTransform(opn, cv.DIST_L2, 3)
_ret, result = cv.threshold(distance, 0.7 * distance.max(), 255, cv.THRESH_BINARY)

plt.subplot(141), plt.imshow(img, cmap='gray'), plt.title('org'), plt.axis('off')
plt.subplot(142), plt.imshow(opn, cmap='gray'), plt.title('opn'), plt.axis('off')
plt.subplot(143), plt.imshow(distance, cmap='gray'), plt.title('distance'), plt.axis('off')
plt.subplot(144), plt.imshow(result, cmap='gray'), plt.title('result'), plt.axis('off')

在这里插入图片描述

  • 13
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: cv2.distanceTransform()是OpenCV中的一个函数,用于计算图像中非零像素点到最近零像素点的距离。它返回一个与输入图像大小相同的浮点型矩阵,其中每个像素点的值表示到最近零像素点的距离。 ### 回答2: cv2.distancetransformOpenCV中一个用于计算距离变换的函数。距离变换是指计算图像中每一个像素点与最近的目标像素点之间的距离,并将其映射到新的图像中。 这个函数主要有两种模式:CV_DIST_L1和CV_DIST_L2。CV_DIST_L1使用曼哈顿距离计算像素点之间的距离,即两点之间的横向和纵向的距离之和;CV_DIST_L2使用欧式距离计算像素点之间的距离,即两点之间的直线距离。 cv2.distancetransform函数采用二值图像作为输入,并返回一个浮点型图像,其中每个像素点的值表示了该点与最近的目标像素点之间的距离。 这个函数常用于图像分析和图像处理任务中,如图像分割、形态学操作等。通过距离变换,我们可以获取到图像中各个像素点到目标像素点的距离,从而能够更好地理解图像中的结构和形状,进而进行进一步的处理和分析。 总结起来,cv2.distancetransform是一个用于计算距离变换的函数,它可以通过输入二值图像,计算出每个像素点与最近目标像素点之间的距离,并将结果映射到新的图像中。这个函数在图像分析和处理中起到了重要的作用。 ### 回答3: cv2.distancetransformOpenCV库中的一个函数,用于进行距离变换。距离变换是将图像中的每个像素点转换为离其最近的一个特定对象的距离的操作。具体而言,cv2.distancetransform函数可以计算灰度图像中每个像素点到离该像素点最近的边界像素点的欧氏距离。 在使用cv2.distancetransform函数时,需要传入一个二进制图像作为输入参数,表示需要进行距离变换的对象区域。函数将返回一个与输入图像相同大小的图像,其中每个像素点的值表示该像素点到最近边界像素点的欧氏距离。 距离变换在图像处理中有多种应用,如计算图像中每个像素点到离其最近的边界像素点的距离,可以用于图像分割、目标检测等任务。距离变换还可以用于计算骨架化图像、计算图像中物体的中心距离等。 总之,cv2.distancetransform函数是OpenCV中用于计算图像距离变换的函数,通过该函数可以实现将图像中每个像素点转换为离其最近的边界像素点的距离的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值