Вырезать объект за один раз - PullRequest
0 голосов
/ 19 апреля 2020

Метод, который я использовал, grabcut, был изменен в соответствии с кодом официального сайта, но сейчас он не интерактивен. Объекты должны быть вырезаны за один раз

В моем коде я использую прямоугольник для обрамления сначала объект, а затем вырезать его. Но всегда есть часть, которая не может быть вырезана полностью

Что можно сделать, чтобы вырезать изображение полностью banana

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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...