我计算了灰度图像中每个像素的最小和最大像素值,如下所示:
smallest = numpy.amin(image)
biggest = numpy.amax(image)
但这只适用于灰度图像。
我该如何在彩色图像(RGB)上实现相同的效果?
我计算了灰度图像中每个像素的最小和最大像素值,如下所示:
smallest = numpy.amin(image)
biggest = numpy.amax(image)
但这只适用于灰度图像。
我该如何在彩色图像(RGB)上实现相同的效果?
您可以使用片段访问每个通道,如下所示:
# red
image[..., 0].min()
image[..., 0].max()
# green
image[..., 1].min()
image[..., 1].max()
# blue
image[..., 2].min()
image[..., 2].max()
JpegImageFile
(不确定是哪个库)。如果JpegImageFile
类支持它,你可能只需要做data = np.array(image)
。 - Joe Kingtonnp.array(image)
将其转换为 Numpy 数组。 - YXDimport 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])
red, green, blue = result
吗?此外,使用哪个轴(axis=0
参数)取决于数组的排序方式。 - Joe Kingtonmin(axis=0)
而不是 max
。 - Joe Kingtonsmallest = image.min(axis=(0, 1))
largest = image.max(axis=(0, 1))
在我看来,最清晰的语法是。
这里最流行的建议都很糟糕。
import numpy as np
max_channels = np.amax([np.amax(img[:,:,0]), np.amax(img[:,:,1]), np.amax(img[:,:,2])])
print(max_channels)
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)
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()
即可。