背景:我刚开始使用Python的PIL进行照片处理,并且最近发现在现有程序中需要基本的照片处理功能。我的程序目前导入的图像(实际上是夜空的高分辨率),其中有很大比例的黑色空间(显然)和几个亮白色的最大值。
问题:在导入的图像中找到每个最大值的坐标(相对于画布坐标,如果可能)的最佳方法是什么?
我查看了PIL文档,并找到了获取某种颜色像素数的方法,但当然这并不符合我的要求。正如我所说的,我是Python的PIL / Photo-manipulation的新手,所以对此的任何帮助都会很棒。
提前致谢! :)
答案 0 :(得分:2)
有getextrema()
方法返回用于每个波段的最低和最高图像数据。因此,为了找到最亮的像素,您需要首先获得图像的灰度副本。然后,您可以迭代图像中的每个像素,并检查每个像素是否具有最高灰度值:
grayscale = image.convert('L')
minima, maxima = grayscale.getextrema()
for width in image.size[0]:
for height in image.size[1]:
if grayscale.getpixel((width, height)) == maxima:
# So here we have one pixel with the highest brightness.
然而,根据您实际尝试实现的目标,可能会有更简单,更有效的方法。例如,当您想要在黑色背景上粘贴所有最亮的像素时,您可以这样做:
grayscale = image.convert('L')
minima, maxima = grayscale.getextrema()
mask = image.point([0] * maxima + [255] * (256 - maxima))
new_image = PIL.Image.new('RGB', image.size)
new_image.paste(image, mask=mask)