python - 使用openCV python查找骨架与边界之间的距离

标签 python opencv image-processing euclidean-distance opencv-contour

我正在尝试在python中使用openCV查找曲线的最大宽度。我使用了Canny边缘检测器来获取曲线的边界。然后,我设法在它们之间创建了一个骨架,如附加的image中的红线所示。现在,我需要找到此骨架与白线段之间的距离,以便可以将最大距离乘以2以获得宽度。简而言之,我需要蓝线的长度。

我尝试使用距离变换,但是我没有闭合的轮廓,所以我得到的宽度不正确。我还尝试了扩张,然后进行腐 eclipse 以得到闭合的轮廓,但这改变了曲线的宽度。坚持了很长时间。任何帮助将不胜感激。

最佳答案

最大宽度是边界上任何点到中线的最大距离(可能乘以2)。

要确定此值,可以使用distance_transform,如下所示:

import numpy as np
import matplotlib.pyplot as plt
import cv2

# Generate test image
size = (100, 100)

mid_line = np.zeros(size, dtype='uint8')
mid_line[(range(10, 40), range(10, 40))] = 1
mid_line[(range(40, 80), np.linspace(40, 70, 40).astype(int))] = 1

outline = np.zeros(size, dtype='uint8')
outline[(np.linspace(5, 33, 30).astype(int),
         np.linspace(16, 47, 30).astype(int))] = 1

outline[(np.linspace(14, 47, 30).astype(int),
         np.linspace(5, 35, 30).astype(int))] = 1

outline[(np.linspace(36, 72, 40).astype(int),
         np.linspace(50, 77, 40).astype(int))] = 1

outline[(np.linspace(47, 88, 40).astype(int),
         np.linspace(35, 65, 40).astype(int))] = 1

dist = cv2.distanceTransform(255 - (255*mid_line), cv2.DIST_L2, 3)

# Visualize
plt.figure("Mid line plus edges over the distance transform")
plt.imshow(dist, cmap='gray')
overlay = mid_line + 2 * outline
plt.imshow(np.ma.masked_where(overlay == 0, overlay), cmap='jet', alpha=0.6)

# Get the maximum width
max_width = np.max(dist[outline > 0])
print("Maximum width:", max_width)


plt.show()

生成图像:

enter image description here

并输出:
Maximum width: 10.954346

到终端。

关于python - 使用openCV python查找骨架与边界之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53808511/

相关文章:

opencv - 模板匹配噪声图像的最佳方法是什么?

python - 检测像素是否为红色

opencv - 估计白色背景

python - 类型错误 : unhashable type: 'list' by converting list to set

python - 如何在 Google App Engine (GAE) 上运行的 Web2py 上创建新的 auth_user 和 auth_group?

python - Scrapy 响应不完整

python - 我该如何修复这个错误?坏键错误 : Name must be string type

python - 使用 cv2.equalizeHist 时出错

python - 通过 Pillow 的 Image.frombytes 创建的图像与预期不同

python - OpenCV VideoWriter 不写任何东西