背景:
我是使用 Python 的 PIL 进行照片处理的新手,最近发现在现有程序中需要基本的照片处理功能。我的程序目前导入了一张图像(实际上是夜空的高分辨率照片),其中有很大比例的黑色空间(显然)和几个明亮的白色最大值。
问题:找到导入图像中每个最大值
的坐标(如果可能,相对于画布坐标)的最佳方法是什么?
我查看了 PIL 文档,并找到了获取某种颜色的像素数的方法,但这当然不能满足我的要求。正如我所说,我是使用 Python 进行 PIL/照片操作的新手,所以任何关于这方面的帮助都会很棒。
提前致谢!:)
问问题
1338 次
1 回答
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)
于 2013-09-20T11:53:49.637 回答