假设您有一个二维numpy数组的图像,如下所示。现在你想要侵蚀图像。然而,你不想同样地侵蚀它。只有当图像中的物体强度小于50时,它才会被侵蚀,否则它根本不应该受到影响。
在下面的图像中,只有蓝色标记的区域应该被侵蚀,但是较轻的灰色区域应该保持不变。
此外,任何与浅灰色区域相邻的深灰色区域都不应受到影响(红色标记).后一种要求使整个物体很难被腐蚀,然后将原来的浅灰区域放回原来的灰度区域,因为这样的操作也会影响深灰色,如果冲蚀一直侵蚀到红色部分,那么深灰色也会被标记成红色。在这种情况下,物体上会有一个洞。
我已经研究过OpenCV的erode函数,但是它没有任何选择。我也在谷歌上搜索,没有找到任何解决方案。

发布于 2022-08-22 17:15:04
下面的直进解决方案可能对更复杂的图像起作用,也可能不起作用。但是对于这个例子,它应该做你需要做的事情。
例如(Python伪代码,使用NumPy风格的索引符号等等):
out = erosion(img)
mask = img >= 50
out[mask] = img[mask]这也可以写成
mask = out.copy()
mask[mask < 50] = 0
out = max(erosion(img), mask)(其中max是按元素计算的最大值)。
为了避免侵蚀“虽然”薄的明亮区域,在冲蚀中使用最小的结构元素大小,并迭代:
out = img.copy()
for _ in range(10):
out = max(erosion(out, size=1), mask)这当然比较慢,但它会产生你想要的效果。
https://stackoverflow.com/questions/73447862
复制相似问题