1

Ich habe ein Bild mit einem orangefarbenen und einem weißen Hintergrund. Ich möchte den weißen Hintergrund transparent machen. Der folgende Code verwendet Grabcut, um eine Maske zu erstellen. Ich teile dann das Bild in rgb-Kanäle auf und lege die Maske auf den Alpha-Kanal an. Sie sehen auf den Bildern unten, dass Post-Grabcut- und Mask-Bilder in Ordnung sind. Ich konnte nicht herausfinden, wie man die Maske auf den Alpha-Kanal anwendet. Vorschläge geschätzt.Machen Sie ein Bild Hintergrund transparent

im = cv2.imread(sourceimagefile) 
    cv2.imshow('original',im) 
    mask = np.zeros(im.shape[:2],np.uint8) 
    rect = (box[0][0], box[0][1], box[0][2]-box[0][0], box[0][3]-box[0][1]) 
    bgdModel = np.zeros((1,65),np.float64) 
    fgdModel = np.zeros((1,65),np.float64) 
    cv2.grabCut(im,mask,rect,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_RECT) 
    if len(np.where((mask==3)|(mask==1))[0])>0: 
     mask2 = np.where((mask==2)|(mask==0),0,1).astype('uint8') 
     mask2 = np.repeat(mask2[:,:,np.newaxis],3,axis=2) 
    else: 
     mask2 = np.zeros_like(im) 
     mask2[box[0][1]:box[0][3],box[0][0]:box[0][2],:] = 1 
    im2 = im*mask2 
    cv2.imshow('post-grabcut',im2) 
    minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(mask) 
    flag, mask = cv2.threshold(mask, maxVal-1, 255, cv2.cv.CV_THRESH_BINARY) 
    cv2.imshow("mask", mask) 
    b, g, r = cv2.split(im2) 
    img_RGBA = cv2.merge((b, g, r, mask)) 
    cv2.imshow("final",img_RGBA) 

originalpost-grabcutmaskfinal

Antwort

1

nach einer älteren SO Frage, nicht imshow nicht wirklich Alpha-Kanäle http://jepsonsblog.blogspot.com/2012/10/overlay-transparent-image-in-opencv.html aber dies ist eine alte Post und Unterstützung MAY wurde hinzugefügt unterstützen, aber ich weiß nicht sicher wissen

+0

Mein ursprünglicher Code war korrekt und Maske * 255 ist nicht erforderlich. Das Problem war, dass imshow keine Alpha-Kanäle unterstützt, wie Sie richtig angemerkt haben. Möchten Sie Ihre Antwort bearbeiten und ich akzeptiere? – gobob

+0

Ich machte die Änderungen, froh, dass einige der Informationen für Sie hilfreich waren @gobob – andrew

Verwandte Themen