找到最小和最大像素的值

时间:2014-01-14 15:34:26

标签: python arrays image numpy colors

我计算了灰度图像中像素的最小和最大像素值,如下所示:

smallest = numpy.amin(image)
biggest = numpy.amax(image)

但这仅适用于灰度。

如何为彩色图像(RGB)做同样的事情?

6 个答案:

答案 0 :(得分:9)

您可以使用切片访问每个通道,如下所示:

# red
image[..., 0].min()
image[..., 0].max()
# green
image[..., 1].min()
image[..., 1].max()
# blue
image[..., 2].min()
image[..., 2].max()

答案 1 :(得分:3)

您可以在python脚本中快速测试它。

import numpy
img = numpy.zeros((10,10,3), dtype=numpy.int)  # Black RGB image (10x10)
img[5,2] = [255, 255, 255]
print img.reshape((img.shape[0]*img.shape[1], 3)).max(axis=0)
  

数组([255,255,255])

答案 2 :(得分:2)

假设您有一个BGR图像(使用OpenCV加载),我找到了一种简单的方法:

import numpy as np

max_channels = np.amax([np.amax(img[:,:,0]), np.amax(img[:,:,1]), np.amax(img[:,:,2])])

print(max_channels)

答案 3 :(得分:0)

import numpy
img = numpy.zeros((10,10,3), dtype=numpy.int)  
img[5,2] = [255, 255, 255]
print img.reshape((img.shape[0]*img.shape[1], 3)).max(axis=0)

答案 4 :(得分:0)

如果要将结果作为数组,这是一个简单的解决方案:

smallest = np.amin(image, axis=(0, 1))
largest = np.amax(image, axis=(0, 1))

但是由于某些原因,这些速度更快:

smallest = image.min(axis=0).min(axis=0)
biggest = image.max(axis=0).max(axis=0)

如果您希望将结果作为列表,只需将.tolist()添加到上述内容的末尾即可。

答案 5 :(得分:0)

smallest = image.min(axis=(0, 1))

largest = image.max(axis=(0, 1))

是语法上最整洁的imo。这里最受欢迎的建议太糟糕了。