最近相求一个二值图中,白色的值到最近的黑色值。换句话说:相求下图中的白色图形中的最大内切半径。
思路如下:
1、转换为距离图
2、找出最大的距离就是最大内切圆的半径。
但是在转换的过程中,使用到cv2.distanceTransform函数
distance_transform = cv2.distanceTransform(mask, cv2.DIST_L2, 0)
一般会有三个参数,第二个参数是欧式距离,最关键的控制精度的第三个参数的含义如下:
在 OpenCV 的 cv2.distanceTransform 函数中,掩码大小的选择会影响计算的精度和性能。通常,掩码越大,计算的精度越高,但计算的复杂度和时间也会增加。
3x3掩码(cv2.DIST_MASK_3 或者直接使用 3):这是一个较小的掩码,计算速度较快,但精度较低。适用于对精度要求不高的应用场景。
5x5掩码(cv2.DIST_MASK_5 或者直接使用 5):这是一个较大的掩码,计算速度较慢,但精度较高。适用于对精度要求较高的应用场景。
0的话:如果你使用的是 0 作为掩码大小,OpenCV将自己选择一个合适的掩码来执行操作。
三个值在我验证的过程中,发现0的精度最高,5的精度次之,3的精度最低。
因为我画的是一个半径为25的圆,结果如下:
参数为3: 最大半径为24.289299
参数为5: 最大半径为24.768995
参数为0: 最大半径为25.019992
结果图在下面,分别是3、5、0
可以看到取0的精度是最高的,建议各位小伙伴用的时候直接取0。