繁体   English   中英

如何根据类更改抓取蒙版中的颜色

[英]how to change the color in grabcut mask based on a class

这是我的形象:

在此处输入图像描述

我有 2 类狗和卡车我也有他们的 bbox 坐标所以我想为这个图像创建一个蒙版所以我应用了 grapcut 算法这是我的代码

img=cv2.imread('dog.jpg')
mask=np.zeros(img.shape[:2],np.uint8)

bgModel=np.zeros((1,65),np.float64)
fgModel=np.zeros((1,65),np.float64)
tmpimage=image
masks=[]
for i in recs:
    cv2.grabCut(img,mask,i,bgModel,fgModel,10,cv2.GC_INIT_WITH_RECT)
    mask2=np.where((mask==2)|(mask==0),0,1).astype('uint8')
    masks.append(mask2)
    #img=image*mask2[:,:,np.newaxis]
finalmask=np.zeros(img.shape[:2],np.uint8)
for i in range(len(masks)):
   finalmask=finalmask+masks[i]
plt.imshow(finalmask)
# plt.colorbar()
#plt.xticks([]),plt.yticks([])
plt.show()

这是最终的面具:

在此处输入图像描述

我想要做的是我希望狗的区域与这张图片中卡车的区域颜色不同,两者都具有相同的黄色

在您的情况下finalmask是一个 2 通道图像。 您从plt.imshow(finalmask)获得的输出是黄色 -> 255 和紫色 -> 0 的二进制图像。

我创建了一个具有 3 通道的蒙版,并为每个蒙版分配了随机颜色。

代码:

# creating 3-channel mask:
finalmask = np.zeros(img.shape, np.uint8)

for i in range(len(masks)):
    # generating random color 
    # plucked from: https://stackoverflow.com/questions/28999287/generate-random-colors-rgb
    color = tuple(np.random.choice(range(256), size=3))

    # create another mask to place color in white regions
    im = np.zeros(img.shape, np.uint8)
    im[masks[i] == 255] = color

    # add with final mask
    finalmask = finalmask + im

结果:

这是我创建的示例蒙版:

在此处输入图像描述 & 在此处输入图像描述

最终结果:

在此处输入图像描述

注意:如果您想为每个蒙版标签固定颜色,您可以创建一个字典并从中引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM