适用场景:
将图片中指定颜色消除:
例如:将如下图片中得红色框消除
代码
from PIL import Image
from random import randint
import os
import shutil
# 将红色替换为周围像素点的颜色
def replace_color1(img_path, save_path):
img = Image.open(img_path)
width = img.size[0]
height = img.size[1]
for i in range(1, width):
for j in range(1, height):
data = (img.getpixel((i, j))) # 得到每一个像素点的值
# print(data) # 打印每个像素点的颜色RGBA的值(r,g,b,alpha)
# 根据自己要消除的指定颜色来设置rgb三通道的值范围(可用取色笔得到大概值,然后设置取值范围)
if data[0] >= 150 and data[1] <= 100 and data[2] <= 100: # RGBA的r值g值b值
right_point = (img.getpixel((i, j)))
top_point = (img.getpixel((i, j)))
if right_point[0] >= 150 and right_point[1] <= 100 and right_point[2] <= 100 and top_point[0] >= 150 and \
top_point[1] <= 100 and top_point[2] <= 100:
try:
img.putpixel((i, j), (img.getpixel((i, j + 30))))
except:
img.putpixel((i, j), (img.getpixel((i, j - 30))))
else:
if right_point[0] >= 150 and right_point[1] <= 100 and right_point[2] <= 100:
img.putpixel((i, j), top_point) # 将这些像素点的颜色替换
elif top_point[0] >= 150 and top_point[1] <= 100 and top_point[2] <= 100:
img.putpixel((i, j), right_point) # 将这些像素点的颜色替换
else:
img.putpixel((i, j), right_point) # 将这些像素点的颜色替换
img = img.convert("RGB") # 把图片强制转成RGB
img.save(save_path) # 保存修改像素点后的图片
replace_color1(r'1.jpg', r'2.jpg')
输出结果:
经代码替换后的图片如下:对于边界的红色部分还没能做到完全消除、仍有微小痕迹