Я получил этот код:
$im = new Imagick("test.jpg"); $im->paintTransparentImage($im->getImageBackgroundColor(), 0, 500); $im->setImageFormat('png'); $im->writeImage('finish.png');
И это результат (я добавил вручную розовый фон, чтобы увидеть проблемы лучше):
Когда я увеличиваю fuzz
тогда более белые пиксели исчезают рядом с объектом, но затем более белые пиксели также исчезают внутри объекта.
Я попробовал одно и то же изображение на веб-сайте, и результат:
Это довольно хорошо. Кто-нибудь знает, как это сделать?
Если кому-то понадобится исходное изображение для тестирования:
ОБНОВИТЬ:
Добавление $im->despeckleimage();
до $im->paintTransparentImage
дает лучший результат:
Единственное, что нужно сделать, это заполнить небольшие пустые области белыми пикселями. Есть ли способ сделать это?
Я получил мгновенное решение, используя алгоритм GrabCut . Я использовал OpenCV 3 с python, чтобы получить желаемый результат. К сожалению, я не знаю php
и не знаю, как это imagik
.
КОД:
import numpy as np import cv2 img = cv2.imread('Dress.jpg',1) cv2..imshow('Original image',img) mask = np.zeros(img.shape[:2],np.uint8) bgdModel = np.zeros((1,65),np.float64) fgdModel = np.zeros((1,65),np.float64) rect = (60,20,325,503) cv2.grabCut(img,mask,rect,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_RECT) mask2 = np.where((mask==2)|(mask==0),0,1).astype('uint8') nimg = img*mask2[:,:,np.newaxis] cv2.imshow("Extracted image",nimg) cv2.waitKey() cv2.destroyAllWindows()
Сначала я создал черный фон, используя переменную mask
.
Это то, что я получил.
Посетите ЭТУ СТРАНИЦУ для получения подробной информации об этом алгоритме и используемых параметрах. Вы также можете использовать это для маскировки на цветном фоне.
Я верю, то же самое можно попробовать с помощью imagik
. Надеюсь это поможет 🙂
РЕДАКТИРОВАТЬ:
Это в ответ на редактирование, сделанное вами на вопрос.
Следующее было изображение, загруженное вами:
Я применил порог и получил следующее изображение:
Теперь я выполнил операцию «морфологическое закрытие» и получил следующее:
Наконец, я замаскировал изображение выше с исходным изображением, которое вы загрузили в начале, чтобы получить это: