使用np.isin和np.where [issue]

时间:2019-04-16 10:59:55

标签: python-3.x numpy opencv

我是python和图像处理的新手。我正在尝试使用np.isin和np.where在输入图像中找到给定RGB值的列表(我想避免所有像素的嵌套循环)。 所以,这是输入和输出

输入:https://imgur.com/eNylzA9

输出:https://imgur.com/lDctkj9

我正在使用以下代码-

fliterlist = [
    [244,240,255],
    [253,239,255],
    [255,234,249],
    [255,230,245],
    [255,229,243],
    [255,228,242]
]
# actual list has more than 100 elements

def imageTest(img,count=0):

    outImg = np.zeros(img.shape,dtype=np.uint8)

    posArray=(np.isin(img,bb)).all(axis=2)
    outImg[np.where(posArray)] = [255,255,255]

    outname = './fast/imageTest_'+str(count)+'.jpg'
    outputlist[outname]=outImg

    return

由于某种原因,我没有得到预期的输出。我的意思是,如果我使用双嵌套循环遍历所有像素,则会得到理想的结果。但是这里看起来np.isin给了我一个不同的结果。 请帮助我确定问题。

这是一个完美的示例想法-

图片-https://imgur.com/zP3zuLj

1 个答案:

答案 0 :(得分:0)

如下使用opencv的inrange函数:

mask = cv2.inRange(image, lower_range, upper_range)

我了解您要查找特定的像素,因此请相应调整范围。 以我的经验,无论使用哪种像素,您都将尝试完成更好的任务,这将是有益的。但是以后要取决于你。