使用 PIL 从图像中有效地提取前 5 个像素
efficiently extract first 5 pixels from image using PIL
我有一大包 .jpg 天空图像,其中一些是人为的白色;这些图像的每个像素都设置为 (255, 255, 255)。我需要把这些图像挑出来。我通过只查看前 5 个像素来做到这一点。我的代码是:
im = Image.open(imagepath)
imList = list(im.getdata())[:5]
if imList = [(255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255)]:
return True
但是,这个过程会花费大量时间,因为 im.getdata() return 是整个图像,我可以使用不同的函数来 return 更少的数据,或者可能是特定像素?我需要查看多个像素,因为其他图像可能有一个或两个像素是全白的,所以我查看 5 个像素以避免误报。
可以使用Image.getpixel
方法:
im = Image.open(imagepath)
if all(im.getpixel((0, x)) == (255, 255, 255) for x in range(5)):
# Image is saturated
这假设您的图片每行至少有五个像素。
通常情况下,访问单个像素比加载整个图像和摆弄 PixelAccess
对象要慢得多。但是,对于您正在使用的图像的一小部分,您可能会浪费很多时间来加载整个图像。
您可以通过调用 load
on a sub-image returned lazily by crop
:
来加快速度
im = Image.open(imagepath).crop((0, 0, 5, 1)).load()
if all(x == (255, 255, 255) for x in im):
# Image is saturated
我有一大包 .jpg 天空图像,其中一些是人为的白色;这些图像的每个像素都设置为 (255, 255, 255)。我需要把这些图像挑出来。我通过只查看前 5 个像素来做到这一点。我的代码是:
im = Image.open(imagepath)
imList = list(im.getdata())[:5]
if imList = [(255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255)]:
return True
但是,这个过程会花费大量时间,因为 im.getdata() return 是整个图像,我可以使用不同的函数来 return 更少的数据,或者可能是特定像素?我需要查看多个像素,因为其他图像可能有一个或两个像素是全白的,所以我查看 5 个像素以避免误报。
可以使用Image.getpixel
方法:
im = Image.open(imagepath)
if all(im.getpixel((0, x)) == (255, 255, 255) for x in range(5)):
# Image is saturated
这假设您的图片每行至少有五个像素。
通常情况下,访问单个像素比加载整个图像和摆弄 PixelAccess
对象要慢得多。但是,对于您正在使用的图像的一小部分,您可能会浪费很多时间来加载整个图像。
您可以通过调用 load
on a sub-image returned lazily by crop
:
im = Image.open(imagepath).crop((0, 0, 5, 1)).load()
if all(x == (255, 255, 255) for x in im):
# Image is saturated