gpt4 book ai didi

python - 去除被白色像素OpenCV包围的像素

转载 作者:太空宇宙 更新时间:2023-11-03 21:22:05 24 4
gpt4 key购买 nike

我有一张黑白图像,其中有很多噪点。我只想删除完全被白色像素包围的黑色像素。我尝试使用 Filter2d 这样做,但无法实现。

最佳答案

我会(再次)使用卷积1:

>>> import numpy as np
>>> from scipy.signal import convolve2d
>>>
>>> kernel = np.ones((3,3))
>>> kernel[1,1] = 0
>>> print(kernel)
[[ 1. 1. 1.]
[ 1. 0. 1.]
[ 1. 1. 1.]]
>>> # Create a decent test array that shows the features
... test = np.array(
... [[0,1,1,0,1,1],
... [1,1,1,1,1,0],
... [1,0,1,1,0,1],
... [1,1,1,0,0,0],
... [1,1,1,0,1,0],
... [1,1,1,0,0,0]])
>>>
>>> mask = convolve2d(test, kernel, mode='same', fillvalue=1)
>>> print(mask)
[[ 8. 7. 7. 8. 6. 7.]
[ 6. 6. 6. 6. 5. 7.]
[ 7. 8. 6. 5. 4. 4.]
[ 7. 7. 5. 5. 3. 5.]
[ 8. 8. 5. 4. 0. 4.]
[ 8. 8. 6. 6. 4. 6.]]
>>> result = test.copy()
>>> result[np.logical_and(mask==8, test==0)] = 1
>>> print(result)
[[1 1 1 1 1 1]
[1 1 1 1 1 0]
[1 1 1 1 0 1]
[1 1 1 0 0 0]
[1 1 1 0 1 0]
[1 1 1 0 0 0]]

如您所见,result 数组改变了所有 8 个边上完全被白色(用 1 表示)包围的“黑色”像素(此处用 0 值表示),甚至在角落和边缘。

编辑:Hugo Rune 的回答更好,但如果你有“胡椒”噪音,这意味着你会有小的 黑色像素被白色像素包围,而不仅仅是 单个像素。对于单个像素,这就是我解释你的问题的方式,上面的方法可以正常工作。

脚注:

1:实际上你需要一个correlation,但在这种情况下它是相同的,因为内核是对称的。

关于python - 去除被白色像素OpenCV包围的像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28151801/

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