Opencv python – проверьте, есть ли конкретное значение пикселя в изображении

avatar
quantumbutterfly
8 апреля 2018 в 10:23
1661
2
2

Допустим, у меня есть изображение в opencv. Например,

img = cv2.imread(file_path)

Допустим также, что у меня есть значение в пикселях. Например,

pixel = np.array([200,200,200])

Я хочу знать, есть ли пиксель в img со значением pixel.

Как лучше всего это сделать?

Я попробовал img.any(pixel), но это не сработало. Я знаю, что вы, вероятно, можете вручную проверить с помощью циклов, но я уверен, что должен существовать более элегантный способ.

Мне просто нужен логический ответ "да" или "нет".

Источник
furas
19 февраля 2020 в 12:08
0

((img == [200,200,200]).all(axis=2)).any() ?

Ответы (2)

avatar
timgeb
8 апреля 2018 в 10:38
1

Моя первая идея состоит в том, чтобы изменить форму массива, а затем выполнить проверку in после преобразования сформированного массива в список.

Демо:

>>> a = np.array([[[1, 2, 3], [4,5,6]], [[7,8,9], [10,11,12]]])
>>> a
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])
>>> shaped = a.reshape(a.size/3, 3)
>>> shaped
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])
>>> [4, 5, 6] in shaped.tolist()
True
>>> [6, 5, 4] in shaped.tolist()
False

(Могут существовать более эффективные решения.)

avatar
Saurav Panda
8 апреля 2018 в 19:02
0

Я не знаю, как вам на самом деле нужно найти, но если вам нужно посмотреть, имеет ли какой-либо пиксель изображения значение 200, просто сделайте это:

print((a==200).any())

вы получите true, если в массиве существует пиксель со значением 200, иначе вы получите false. Надеюсь, это решит ваш вопрос.