如何填充图像中的孔或减少噪声?
How to fill holes or reduce noise in an image?
我需要降低图像中的噪点,如下图所示,即填充白色物体中的孔。我用 opencv 尝试了一些东西,但最终删除了部分对象,如您所见。有没有更好的方法可以在不丢失对象本身的情况下做到这一点?感谢您的帮助!
这是我目前的情况:
import numpy as np
import cv2
def remove_noise(gray, num):
Y, X = gray.shape
nearest_neigbours = [[
np.argmax(
np.bincount(
gray[max(i - num, 0):min(i + num, Y), max(j - num, 0):min(j + num, X)].ravel()))
for j in range(X)] for i in range(Y)]
result = np.array(nearest_neigbours, dtype=np.uint8)
cv2.imwrite('result.png', result)
return result
img = cv2.imread('img.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
remove_noise(gray, 10)
输入图像:
输出图像:
按照@JeruLuke的建议,我使用了cv.morphologyEx(img, cv.MORPH_CLOSE, kernel)
并通过以下代码片段得到了我想要的结果。
import cv2
import numpy as np
image = cv2.imread('image.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
kernel_size = (7, 7)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, kernel_size)
closing = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, kernel)
cv2.imwrite('result.png', closing)
输出图像:
我需要降低图像中的噪点,如下图所示,即填充白色物体中的孔。我用 opencv 尝试了一些东西,但最终删除了部分对象,如您所见。有没有更好的方法可以在不丢失对象本身的情况下做到这一点?感谢您的帮助!
这是我目前的情况:
import numpy as np
import cv2
def remove_noise(gray, num):
Y, X = gray.shape
nearest_neigbours = [[
np.argmax(
np.bincount(
gray[max(i - num, 0):min(i + num, Y), max(j - num, 0):min(j + num, X)].ravel()))
for j in range(X)] for i in range(Y)]
result = np.array(nearest_neigbours, dtype=np.uint8)
cv2.imwrite('result.png', result)
return result
img = cv2.imread('img.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
remove_noise(gray, 10)
输入图像:
输出图像:
按照@JeruLuke的建议,我使用了cv.morphologyEx(img, cv.MORPH_CLOSE, kernel)
并通过以下代码片段得到了我想要的结果。
import cv2
import numpy as np
image = cv2.imread('image.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
kernel_size = (7, 7)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, kernel_size)
closing = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, kernel)
cv2.imwrite('result.png', closing)
输出图像: