Метод, который я использовал, grabcut, был изменен в соответствии с кодом официального сайта, но сейчас он не интерактивен. Объекты должны быть вырезаны за один раз
В моем коде я использую прямоугольник для обрамления сначала объект, а затем вырезать его. Но всегда есть часть, которая не может быть вырезана полностью
Что можно сделать, чтобы вырезать изображение полностью
import numpy as np
import cv2 as cv
def grabcut(img):
mask = np.zeros(img.shape[:2],np.uint8)
bgModel1 = np.zeros((1,65),np.float64)
fgModel1 = np.zeros((1,65),np.float64)
tickCount1 = cv.getTickCount()
cv.grabCut(img,mask,rect,bgModel1,fgModel1,5,cv.GC_INIT_WITH_RECT) # grabcut with rect
tickCount2 = cv.getTickCount()
tickcount= tickCount2-tickCount1
print("the time %s s" %(tickcount/(cv.getTickFrequency()) ))
mask2 = np.where((mask==1) + (mask==3),255,0).astype('uint8')
output = cv.bitwise_and(img2,img2,mask=mask2)
return output
if __name__ == '__main__':
print("--------------------running------------------------------")
img = cv.imread("D:\\Onedrive\\Documents\\codes\\GrabCut\\GrabCut\\banana.jpg")
img2 = img.copy()
output = np.zeros(img.shape,np.uint8)
rect = (13,15,578,377) # rectangular
output = grabcut(img2)
cv.namedWindow('output', cv.WINDOW_FREERATIO)
cv.imshow('output', output)
k = cv.waitKey()
cv.destroyAllWindows()
cv.imwrite("output1.jpg",output)