Я пытаюсь удалить относительно тривиальный фон из нескольких изображений, где фон имеет тенденцию быть белым.Однако сгенерированная маска перекрывает передний план, даже если она не содержит много белого.Например, с учетом следующего ввода:
![enter image description here](https://i.stack.imgur.com/YnEu8m.png)
GrabCut дает:
![enter image description here](https://i.stack.imgur.com/YnEu8m.png)
А вот и мой код:
img = cv2.imread('test.jpg')
mask = np.zeros(img.shape[:2], np.uint8)
bgdModel = np.zeros((1,65),np.float64)
fgdModel = np.zeros((1,65),np.float64)
height, width, _ = img.shape
rect = (int(width * 0.05), 0, height, int(width * 0.9))
cv2.grabCut(img, mask, rect, bgdModel, fgdModel, 5, cv2.GC_INIT_WITH_RECT)
mask2 = np.where((mask==2)|(mask==0),0,1).astype('uint8')
img = img*mask2[:,:,np.newaxis]
plt.imshow(img),plt.colorbar(),plt.show()
На самом деле я пытаюсь подражать Волшебной палочке Фотошопа, которая бы легко выделяла белый фон.Кто-нибудь знает хороший способ использования opencv?Есть ли способ настроить GrabCut, чтобы сделать подобное?
ОБНОВЛЕНИЕ: После исправления прямоугольника я получаю маску, которая оставляет пробел:
![enter image description here](https://i.stack.imgur.com/0n3S2m.png)