Numpy: Как предотвратить циклическое зацикливание до максимального значения при вычитании из наименьшего значения - PullRequest
0 голосов
/ 06 июня 2018
image = cv2.imread('black.jpg')[:,:,0] # let's just take the red channel alone for brevity
print(image[75:85,155:165]) # print middle 10x10
# output: [[0,0,0,....],...]

Я хочу вычесть 1 из всей интенсивности пикселей.И да, я определенно не хочу, чтобы 0 стали 255.Я просто хочу, чтобы они остались равными 0.

print(image[75:85,155:165]-1)
# output: [[255,255,255,....],...]

print(np.array(image[75:85,155:165])-1)
# output: [[255,255,255,....],...]

print(np.array(image[75:85,155:165], dtype='float32')-1)
# output: [[-1.,-1.,-1.,....],...]

Я могу преобразовать последний обратно в uint8 после .clip(0,255), но это не похоже на правильный способ сделать это.Есть ли способ сделать это напрямую (без приведения и если условия, которые могут быть неэффективны для параллельной обработки)?

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

Поскольку вы удаляете 1 для всех значений, только 0 значений станут 255. Затем вы можете просто вернуть их в 0:

a = np.array(image[75:85,155:165])-1
a[a==255] = 0
0 голосов
/ 06 июня 2018

Лучший способ сделать это - np.where с маской:

grey_new = np.where(image == 0, 0, image - 1)

дополнительную информацию вы можете найти в этом ответе и numpy.where документация.

0 голосов
/ 06 июня 2018

Один простой вариант будет:

image[75:85,155:165] - 1 * (image[75:85,155:165] > 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...