2015-03-22 3 views
2

У меня есть изображение в градациях серого, загруженное как массив numpy в python. Я хотел бы найти координаты, где интенсивности изображения находятся в пределах заданного диапазона, скажем [lowerlim,upperlim]. Я пытался найти с помощью numpy.where вПоиск координат пикселей изображения в пределах заданного диапазона в python

np.where(image>lowerlim and image<upperlim) 

Но он дает ошибку - "Значение истинности массива с более чем один элемент является неоднозначным. Может ли кто-нибудь вести меня, как это сделать в python?

+1

вы, вероятно, ищет [ 'np.logical_and'] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.logical_and.html) вместо обычных 'и' – cel

+0

Th anks @cel ... это решило проблему. Команда, которую я использовал: np.where (np.logical_and (image> lowerlim, image optimist

ответ

1

Как говорится в комментарии вам нужно использовать np.logical_and, если вы хотите использовать логический и Numpy массивов, и выбрать определенные элементы, которые вы можете передать np.where в массив:

>>> a 
array([[[ 2, 3], 
     [ 4, 5]], 

     [[ 9, 10], 
     [20, 39]]]) 
>>> np.where(np.logical_and(3<a,a<10)) 
(array([0, 0, 1]), array([1, 1, 0]), array([0, 1, 0])) 
>>> a[np.where(np.logical_and(3<a,a<10))] 
array([4, 5, 9]) 

Или вместо np.where вы можете напрямую использовать np.extract:

>>> np.extract(np.logical_and(3<a,a<10),a) 
array([4, 5, 9]) 
+2

На стороне примечание оператор '&' будет работать отлично, вместо 'np.logical_and'. Например. '(a> 3) & (a <10)' вместо 'np.logical_and (a> 3, a <10)'. –

Смежные вопросы