我有这样一个巨大的图像数据集:
我想换一下这些衣服的颜色。所有的白色都应该保持白色,所有的紫色都应该变成白色,其他的都应该变成黑色。所需的输出如下所示:
我已经做了下面的代码,它正在做我想要的,但它需要很长的时间来通过大量的图片我有。有没有其他更快的方法?你知道吗
path = r"C:path"
for f in os.listdir(path):
f_name = (os.path.join(path,f))
if f_name.endswith(".png"):
im = Image.open(f_name)
fn, fext = os.path.splitext(f_name)
print (fn)
im =im.convert("RGBA")
for x in range(im.size[0]):
for y in range(im.size[1]):
if im.getpixel((x, y)) == (255, 255, 255, 255):
im.putpixel((x, y),(255, 255, 255,255))
elif im.getpixel((x, y)) == (128, 64, 128, 255):
im.putpixel((x, y),(255, 255, 255,255))
else:
im.putpixel((x, y),(0, 0, 0,255))
im.show()
如果您愿意使用NumPy,则可以大大加快像素操作速度:
该代码生成所需的输出,在我的机器上大约需要1秒,而循环代码需要33秒。你知道吗
希望有帮助!你知道吗
您的图像似乎是苍白的,因为它们代表的是分段,或标记类,通常只有不到256个类。因此,每个像素只是一个标签(或类号),实际颜色在256元素表中查找,即调色板。你知道吗
如果您不熟悉托盘图像,请查看here。你知道吗
所以,你不需要迭代所有1200万像素,你可以只迭代调色板,只有256个元素长。。。你知道吗
这需要290ms,包括加载和保存图像。你知道吗
如果您有成千上万的图像要处理,并且您使用的是一个像样的操作系统,那么您可以使用GNU Parallel。更改上面的代码以接受命令行参数,该参数是图像的名称,并将其保存为
recolour.py
,然后使用:它将使所有的CPU核心在你的CPU繁忙,直到他们都被处理。你知道吗
关键词:图像处理,Python,Numpy,PIL,Pillow,palette,getpalette,putpalette,类,分类,标签,标签,标签图像。你知道吗
相关问题 更多 >
编程相关推荐