我计算了灰度图像中像素的最小和最大像素值,如下所示:
smallest = numpy.amin(image)
biggest = numpy.amax(image)
但这仅适用于灰度。
如何为彩色图像(RGB)做同样的事情?
答案 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。这里最受欢迎的建议太糟糕了。