python - 使图像背景透明

标签 python opencv image-processing computer-vision transparency

我有一张带有橙色和白色背景的图像。我想让白色背景透明。下面的代码使用grabcut来制作蒙版。然后,我将图像分割成 RGB channel ,并在 Alpha channel 上应用蒙版。您将从下面的图像中看到,抓取后图像和蒙版图像都可以。我一直无法弄清楚如何将蒙版应用到 Alpha channel 。感谢建议。

    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)

original post-grabcut mask final

最佳答案

根据一个较旧的SO问题,imshow实际上并不支持alpha channel http://jepsonsblog.blogspot.com/2012/10/overlay-transparent-image-in-opencv.html但这是一个旧帖子,支持可能已添加,但我不确定

关于python - 使图像背景透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38728907/

相关文章:

Python:在文本框中使用鼠标滚轮滚动,而鼠标光标不在文本框中(tkinter)

python - 如何使用 Requests 和 JSON 打印变量

python - 字典分解并创建具有相同值的新字典

cvMatchTemple断言失败错误(VS2015+opencv2)

C++ 没有 [] 的匹配构造函数初始化

c++ - 如何使用 Blob 检测器

java - 通过从 Java/Python 中的照片中删除黑色边框,从图像中裁剪精确的文档纸张

image-processing - 从简单的二维图像中提取线段的简单有效的方法是什么?

Python ssl 获取支持的密码

python - 用纯白色填充图像蒙版中的数字