#python #opencv #image-processing #scikit-image #mathematical-morphology
#питон #opencv #обработка изображений #scikit-изображение #математико-морфология
Вопрос:
Я пытаюсь удалить градиентный фон с изображения, используя операцию морфологического цилиндра. для этой цели я использую функции библиотеки морфологии скимажа (opening, whiet_tophat). Сам по себе белый верх означает = исходное изображение — открытое изображение. В своем коде я сравниваю результаты функции skimage wht с результатами, полученными вручную.
import numpy as np from skimage import morphology import cv2 as cv img = cv.imread('images/TEST.jpg', cv.IMREAD_GRAYSCALE) img_not = cv.bitwise_not(img) se = np.ones((50,50), np.uint8) opened = morphology.opening(img, se) wth_my= img_not - opened wth=morphology.white_tophat(img_not, se) cv.imwrite('images/TEST_Opened.jpg', opened) cv.imwrite('images/TEST_WTH_MY.jpg', wth_my) cv.imwrite('images/TEST_WTH.jpg', wth) cv.waitKey(0) cv.destroyAllWindows()
Результаты совсем другие (см. скриншоты). Пожалуйста, посоветуйте, что не так в моем коде.
Ответ №1:
Как вы сказали, фильтр в цилиндре есть I - opening(I)
. Ты написал:
opened = morphology.opening(img, se) wth_my= img_not - opened
Обратите внимание , как используется одна строка img
, а другая использует img_not
. Вам img_not
также нужно применить открытие, чтобы это было то же изображение, над которым работают две части операции.