gpt4 book ai didi

python - OpenCV - 在不改变区域大小的情况下桥接组件

转载 作者:行者123 更新时间:2023-12-02 16:06:58 26 4
gpt4 key购买 nike

目标:

我想扩张一个内核大小为 N 的二进制掩码,然后用有效的相同内核侵 eclipse 它,但保留由扩张形成的任何连接。当我做 connectedComponentsWithStats ,我希望任何靠近的东西都合并到一个组件中。

这是一项令人惊讶的具有挑战性的尝试。

示例图像:
enter image description here
在这种情况下,目标是让这个杂散像素加入左侧的对象,但不改变左侧对象的大小。

付出的努力:

乍一看,a "closing" operation这似乎很完美,但我注意到它正在侵 eclipse 在膨胀期间形成的连接,对于这个用例根本不起作用。

我一直在考虑扩张、侵 eclipse 的其他选择,以及可能创造性地使用轮廓来提供帮助。

如果我要对掩码的反转进行关闭操作,我认为我很接近 documented here ,但这具有消除源掩码的重要部分的效果,而不仅仅是缩小差距。

我的一个想法是进行膨胀,找到骨架,腐 eclipse ,然后将骨架和原始图像“或”在一起。我遇到了两个问题:1)至少我在网上找到的寻找面具骨架的实现非常慢,2)我不确定这首先是不是最好的主意(骨架线会穿过我的单个像素我试图捕捉?)

我希望我只是愚蠢并且错过了一些明显的东西?

最佳答案

这是使用我在评论中提到的概念。当然,这是一种蛮力方法,但我认为可以对其进行调整以获得理想的结果。

img = cv2.imread('/your/binarized/image', \
cv2.IMREAD_GRAYSCALE)
h, w = gray.shape
ret, markers = cv2.connectedComponents(img)

out = np.copy(img)
for i in range(1, w-1):
for j in range(1, h-1):
if markers[j][i] == 0:
lset = set()
for m in range(-1, 2):
for n in range(-1, 2):
if markers[j+m][i+n] != 0 and \
(markers[j+m][i+n] not in lset):
lset.add(markers[j+m][i+n])
if(len(lset) >= 2):
out[j][i] = 255
break

关于python - OpenCV - 在不改变区域大小的情况下桥接组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61967959/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com