быстрая обработка пикселей с использованием np.isin и np.where [проблема]

#python-3.x #numpy #opencv

#python-3.x #numpy #opencv

Вопрос:

Я новичок в python и обработке изображений. Я пытаюсь найти список заданных значений RGB во входном изображении, используя np.isin и np.where (я хотел избежать вложенного цикла по всем пикселям). Итак, вот входные и выходные данные

Ввод: 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. можете ли вы указать, что вы пытаетесь сделать? Насколько я понимаю, вы пытаетесь ограничить изображение.

2. Давайте просто скажем, что есть изображение. и мне нужно узнать конкретные значения RGB в нем. Например, давайте просто скажем, что я ищу все пиксели со значением [255,0,0] . Таким образом, выходное изображение в основном представляет собой черное изображение только с теми пикселями, которые помечены как [255,255,255]. Помогает ли это?

Ответ №1:

Используйте функцию inrange в opencv следующим образом:

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

Я понимаю, что вы хотите найти конкретный пиксель, поэтому соответствующим образом отрегулируйте диапазон.
По моему опыту, какую бы задачу вы ни пытались выполнить, лучше использовать диапазон пикселей, так что это будет полезно. Но дальше зависит от вас.