Вот два метода:
Метод № 1: cv2.erode()
Вы можете использовать эрозию, чтобы размыть границыбелый объект переднего плана. По сути, идея состоит в том, чтобы выполнить двумерную свертку с ядром. Ядро может быть создано с использованием cv2.getStructuingElement()
, где вы можете передать форму и размер желаемого ядра для создания. Типичные ядра: cv2.MORPH_RECT
, cv2.MORPH_ELLIPSE
или cv2.MORPH_CROSS
. Ядро скользит по изображению, где пиксель считается 1
, если все пиксели под ядром 1
, в противном случае оно размыто до 0
. Чистый эффект состоит в том, что все пиксели на границах будут отбрасываться в зависимости от формы и размера ядра. Толщина переднего плана уменьшается и полезна для удаления небольшого белого шума или для отделения объектов. Вы можете настроить силу эрозии с количеством итераций для выполнения.
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
erode = cv2.erode(image, kernel, iterations=1)
Метод № 1: Открытие с помощью cv2.morphologyEx()
Противоположностью эрозии является расширение, которое улучшает изображение. Как правило, набор выполняется после эрозии, чтобы «нормализовать» эффект морфологической операции. OpenCV объединяет эти шаги в одну операцию, называемую морфологическим открытием. Открытие - это еще одно название эрозии, за которой следует расширение и, как правило, дает более плавные результаты по сравнению с только эрозией.
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
opening = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
Результат
Вы можете поэкспериментировать с формой ядра и количеством итераций. Чтобы удалить больше шума, увеличьте размер ядра и количество итераций, а удаляйте меньше, уменьшите размер ядра и количество итераций.
import cv2
image = cv2.imread('1.png')
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
opening = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel, iterations=3)
cv2.imshow('opening', opening)
cv2.waitKey()