Python Numpy:如何防止从最小值减去时循环到最大值

Python Numpy:如何防止从最小值减去时循环到最大值,python,numpy,Python,Numpy,我想从所有像素强度中减去1。是的,我绝对不希望0变成255。我只想让他们保持0 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,....],...] 我可以在.clip(0255)之后将最后一个转换回uint8,但这感觉不是正确的

我想从所有像素强度中减去1。是的,我绝对不希望0变成255。我只想让他们保持0

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,....],...]

我可以在
.clip(0255)
之后将最后一个转换回
uint8
,但这感觉不是正确的方法。有没有一种方法可以直接进行(无需浇铸,如果条件不利于并行处理)?

一个简单的选择是:

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.,....],...]

由于删除了所有值的1,因此只有0值将变为255。那么,您所能做的就是将它们恢复为0:

image[75:85,155:165] - 1 * (image[75:85,155:165] > 0)

最好的方法是
np。其中
带掩码:

a = np.array(image[75:85,155:165])-1
a[a==255] = 0

更多信息可以在、和文档中找到。

这应该比减法更快,然后选择等于255的值并将其设为0,不是吗?
grey_new = np.where(image == 0, 0, image - 1)