Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找最小和最大像素的值_Python_Arrays_Image_Numpy_Colors - Fatal编程技术网

Python 查找最小和最大像素的值

Python 查找最小和最大像素的值,python,arrays,image,numpy,colors,Python,Arrays,Image,Numpy,Colors,我计算了灰度图像中像素的最小和最大像素值,如下所示: smallest = numpy.amin(image) biggest = numpy.amax(image) # red image[..., 0].min() image[..., 0].max() # green image[..., 1].min() image[..., 1].max() # blue image[..., 2].min() image[..., 2].max() 但这只适用于灰度 如何对彩色图像(RGB)执行

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

smallest = numpy.amin(image)
biggest = numpy.amax(image)
# red
image[..., 0].min()
image[..., 0].max()
# green
image[..., 1].min()
image[..., 1].max()
# blue
image[..., 2].min()
image[..., 2].max()
但这只适用于灰度


如何对彩色图像(RGB)执行相同操作?

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

smallest = numpy.amin(image)
biggest = numpy.amax(image)
# red
image[..., 0].min()
image[..., 0].max()
# green
image[..., 1].min()
image[..., 1].max()
# blue
image[..., 2].min()
image[..., 2].max()

您可以在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])


假设您有一个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)

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

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()
添加到上述每个结果的末尾即可

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

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

是语法上最整洁的。这里最流行的建议很糟糕。

是的,可以这样使用numpy.min和numpy.maxmestimen=numpy.min(img)max=numpy.max(img)?如何在RGB模式下的图像上使用它?实际上,它只返回一个值,我正在寻找一个解决方案这给我错误回溯(最近一次调用):文件“”,第1行,minred=im[…,0].min()TypeError:“JpegImageFile”对象不可用subscriptable@Mumfordwiz-您需要将正在使用的任何内容转换为numpy数组。显然,它是一个
JpegImageFile
(不确定它来自哪个库)。如果
JpegImageFile
类支持它,您可能只需要正确地执行
data=np.array(image)
@Mumfordwiz,这样您就可以使用PIL/pizz读取图像。正如Joe Kington所说,您将能够使用
np.array(image)
转换为Numpy数组,非常感谢!好的,这似乎是可行的,但我不知道如何使用它,并找到每个最小值和最大值color@Mumfordwiz-你所说的“获取每个值”是什么意思?您只需要
红、绿、蓝=结果
?另外,要使用哪个轴(axis=0
参数)将取决于数组的顺序。我正在尝试获取每种颜色的最大值和最小值。我似乎不知道如何使用this@Mumfordwiz-返回的数组是最大红色值、最大绿色值和最大蓝色值。(虽然根据您使用的库等,标注栏的顺序可能不同)要获得最小值,只需使用
min(axis=0)
而不是
max
。添加一些解释将使此答案更有用。这是stackoverflow中的“查看答案”部分。添加一些解释,尽管代码是解释性的。