gpt4 book ai didi

python - 在Python中将一系列颜色更改为白色

转载 作者:太空宇宙 更新时间:2023-11-03 16:18:16 26 4
gpt4 key购买 nike

我使用以下代码将照片中的特定颜色(灰色)更改为白色。但是代码太慢了。欢迎任何建议或替代方案。

import os
import numpy as np
from PIL import Image
for j in range(1,160):
im = Image.open(str(j)+'.jpg')
data = np.array(im)
for i in (range(205,254)):
r1, g1, b1 = i, i, i # Original
r2, g2, b2 = 255, 255, 255 # Replacement

red, green, blue = data[:,:,0], data[:,:,1], data[:,:,2]
mask = (red == r1) & (green == g1) & (blue == b1)
data[:,:,:3][mask] = [r2, g2, b2]

im = Image.fromarray(data)
im.save(os.getcwd()+'\\conv\\'+str(j)+'.jpg')

最佳答案

我认为您在末尾缺少缩进,您将每个输出图像保存了 50 次。我将您的代码更改为:

import numpy as np
from PIL import Image

for j in range(0, 10):
filename = f'{str(j)}.jpg'
print(f'processing {filename} ...')

im = Image.open(filename)
data = np.array(im)
for i in range(205, 254):
r1, g1, b1 = i, i, i # Original
r2, g2, b2 = 255, 255, 255 # Replacement

red, green, blue = data[:,:,0], data[:,:,1], data[:,:,2]
mask = (red == r1) & (green == g1) & (blue == b1)
data[:,:,:3][mask] = [r2, g2, b2]

im = Image.fromarray(data)
im.save(f'x_{filename}')

160 的测试时间太长,所以我只尝试了 10 张图像。在我的笔记本电脑上,我看到一张 6k x 4k jpg 图像:

$ /usr/bin/time -f %M:%e ../grey.py 
processing 0.jpg ...
processing 8.jpg ...
processing 9.jpg ...
435588:70.75

所以 70.8s 和 436MB 内存。

我用 pyvips 重写了你的程序。通常是much faster than PIL, numpy or opencv在这种事情上。 pyvips 版本如下所示:

import pyvips

for j in range(0, 10):
filename = f'{str(j)}.jpg'
print(f'processing {filename} ...')

im = pyvips.Image.new_from_file(filename, access='sequential')

# find all pixels where RGB are equal
mask = (im[0] == im[1]) & (im[1] == im[2])

# we also need g > 204
mask &= im[1] > 204

# and send all those pixels to 255
im = mask.ifthenelse(255, im)

im.write_to_file(f'x_{filename}')

在我的笔记本电脑上我看到:

$ /usr/bin/time -f %M:%e ../grey-vips.py 
processing 0.jpg ...
...
processing 8.jpg ...
processing 9.jpg ...
152084:4.87

4.9 秒和 152MB 内存。

当然,这有点不公平。正如 Amitay 所说,您的代码是循环而不是屏蔽范围,但我对 numpy 的了解还不足以解决这个问题。

关于python - 在Python中将一系列颜色更改为白色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38720810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com