Numpy:当从最小值中减去时,如何防止循环循环到最高值

时间:2018-06-06 14:41:57

标签: python numpy

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 :(得分:2)

最好的方法是使用掩码np.where

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

您可以在this answernumpy.where文档中找到更多信息。

答案 1 :(得分:0)

一个简单的选择是:

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

答案 2 :(得分:0)

由于你删除1到所有值,只有0值将变为255.那么,你可以做的只是将它们放回0:

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