Я использую Opencv и python 3.6 У меня есть изображение с такими размерами:
depth = depth[0:240, 96:320]
Итак, изображение (240 224). Изображение в оттенках серого, и я не хочу рассматривать два крайних значения 0/255 интенсивности пикселей.
У меня уже есть петля в моем скрипте. Я думаю, что мне нужно добавить строку, где я снимаю эти пиксели вот так:
for b in depth: #cicle already existing
if b < 255 and b > 0: #added line
a = a+1
if a <= 121 and a >= 118:
for f in range(25, 223):
#print((x+b)%33)
soundArr[int((f-25)/6)] = soundArr[int((f-25)/6)]+b[f]
но я получаю сообщение об ошибке:
The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Итак, как мне удалить эти пиксели?
я хочу удалить белый и черный пиксели. Поэтому, если пиксель равен 0 или 255, не считайте его
Но что именно вы подразумеваете под «удалением»? Если ваше изображение имеет форму (240, 224), вы не можете просто «удалить» пиксели, форма должна оставаться такой же. Если вы не хотите рассматривать их для какого-либо алгоритма, вы можете замаскировать их или что-то в этом роде.
хорошо, извините, я отредактировал свой вопрос, чтобы быть более ясным. Под удалением я подразумеваю не рассматривать 0 и 255 как значения в следующем алгоритме (см. Код вверху)
Похоже, вам просто нужно изменить цикл, чтобы перебирать каждый пиксель, как указывает @jdehesa. Как есть, вы перебираете каждый строка.
если я установил «if b <255 & b> 0:», я получил эту ошибку: ufunc 'bitwise_and' не поддерживается для входных типов, и входные данные не могут быть безопасно приведены к каким-либо поддерживаемым типам в соответствии с правилом литья '' безопасно ''






Если я правильно понимаю вопрос, вы можете использовать numpy.where, чтобы найти индексы 0 и 255 в вашем изображении глубины. Затем, когда вы перебираете изображение, вы можете игнорировать результаты из numpy.where.
Каждый
bвfor b in depth:представляет собой массив, соответствующий каждой из строк nidepth.b < 255иb > 0создают логические массивы, указывающие, удовлетворяет ли каждый элемент условию. Когда вы выполняетеb < 255 and b > 0, вы пытаетесь создать одно логическое значение из двух логических массивов, что на самом деле не имеет смысла. Вы можете использоватьb < 255 & b > 0для создания третьего логического массива, указывающего, какие элементы удовлетворяют условиям оба, но по-прежнему не имеет смысла использовать его в качестве условия блокаif. Что вы хотите делать с крайними значениями?