у меня есть двоичное изображение, и я хочу удалить маленькие белые точки с изображения с помощью opencv python. Вы можете обратиться к моей проблеме здесь введите здесь описание ссылки
Мое исходное изображение
я хочу выходное изображение как:
у меня есть двоичное изображение, и я хочу удалить маленькие белые точки с изображения с помощью opencv python. Вы можете обратиться к моей проблеме здесь введите здесь описание ссылки
Мое исходное изображение
я хочу выходное изображение как:
Кажется, это работает с использованием подключенных компонентов в Python Opencv.
#!/bin/python3.7
import cv2
import numpy as np
src = cv2.imread('img.png', cv2.IMREAD_GRAYSCALE)
# convert to binary by thresholding
ret, binary_map = cv2.threshold(src,127,255,0)
# do connected components processing
nlabels, labels, stats, centroids = cv2.connectedComponentsWithStats(binary_map, None, None, None, 8, cv2.CV_32S)
#get CC_STAT_AREA component as stats[label, COLUMN]
areas = stats[1:,cv2.CC_STAT_AREA]
result = np.zeros((labels.shape), np.uint8)
for i in range(0, nlabels - 1):
if areas[i] >= 100: #keep
result[labels == i + 1] = 255
cv2.imshow("Binary", binary_map)
cv2.imshow("Result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite("Filterd_result.png, result)
См. здесь
Вы можете просто использовать методы сглаживания изображения, такие как размытие по Гауссу и т. Д., Чтобы удалить шум с изображения, а затем установить двоичный порог, как показано ниже:
img = cv2.imread("your-image.png",0)
blur = cv2.GaussianBlur(img,(13,13),0)
thresh = cv2.threshold(blur, 100, 255, cv2.THRESH_BINARY)[1]
cv2.imshow('original', img)
cv2.imshow('output', thresh)
cv2.waitKey(0)
cv2.destroyAllWinsdows()
выход:
Подробнее о различных методах сглаживания/размытия изображения читайте здесь.
Вы можете использовать функцию closing
- эрозия с последующей дилатацией. Ему не нужна функция размытия.
import cv2 as cv
import numpy as np
img = cv.imread('original',0)
kernel = np.ones((5,5),np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
cv2.imshow('original', img)
cv2.imshow('output', opening)
cv2.waitKey(0)
cv2.destroyAllWindows()