#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)
Я понимаю, что вы хотите найти конкретный пиксель, поэтому соответствующим образом отрегулируйте диапазон.
По моему опыту, какую бы задачу вы ни пытались выполнить, лучше использовать диапазон пикселей, так что это будет полезно. Но дальше зависит от вас.