Python OpenCV grabCut仅输出掩码';s值作为背景

Python OpenCV grabCut仅输出掩码';s值作为背景,python,opencv,numpy,image-segmentation,Python,Opencv,Numpy,Image Segmentation,其中,蓝色表示用户前景的遮罩,绿色表示用户背景的遮罩,我得到以下结果。实际上,只有遮罩的背景标记输出为背景: 蓝色标记保存在掩码中为0,而绿色标记保存为1 这是我的密码。你能帮忙吗 def run_grabcut(): global output global mask bgdmodel = np.zeros((1, 65),np.float64) fgdmodel = np.zeros((1, 65),np.float64) cv2.grabCut(i

其中,蓝色表示用户前景的遮罩,绿色表示用户背景的遮罩,我得到以下结果。实际上,只有遮罩的背景标记输出为背景:

蓝色标记保存在掩码中为0,而绿色标记保存为1

这是我的密码。你能帮忙吗

def run_grabcut():
    global output
    global mask
    bgdmodel = np.zeros((1, 65),np.float64)
    fgdmodel = np.zeros((1, 65),np.float64)
    cv2.grabCut(img, mask, None, bgdmodel, fgdmodel, 1, cv2.GC_INIT_WITH_MASK)
    mask2 = np.where((mask == 0), 255, 0).astype('uint8')
    cv2.bitwise_and(img ,img , output, mask = mask2)
排队

mask2 = np.where((mask == 0), 255, 0).astype('uint8')
您正在将所有背景像素(掩码==0)映射到值255,将所有其他类型(例如前景;掩码==1)映射到值0

添加

 mask3 = np.where((mask == 1), 127, 0).astype('uint8')
将为前景创建单独的遮罩。这就是你要找的吗

或者,是否也要包括潜在的背景(掩码==2)


请注意,如果我使用0作为BG,使用1作为FG,然后使用
where((mask==1)
,我得到的是相反的结果-即,除了标记为1的像素外,所有像素都是黑色的,它们看起来像原始图像中的一样。您能提供完整的代码和运行的图像吗?您知道该示例代码吗?我最终使用一种变通方法解决了它,假设在没有通过矩形的情况下,该算法在遮罩时表现不好首先,我保存绿色标记的(minX,maxX,minY,maxY)并创建一个矩形。然后,我首先将矩形传递给算法以获得掩码-当我有矩形的算法输出掩码时,我将绿色标记附加在其上,然后在掩码模式下使用算法
 mask2 = np.where((mask==0) + (mask==2),255,0).astype('uint8')