python中图片上的水印去除(包含批量处理)

你们有没有遇到过文本文件中烦人的水印无法去除而烦恼。那么以下内容可以看看。

今天我就遇到了一个文本图片中的水印无法去除的情况,在某宝买短期会员后使用wps试了一下还是无法设别图片,后面试了很多软件和网页,由于水印较大且与字母叠在一起,还是不行(当然ps中是可以的,且可以批量处理。作者懒的安装ps且平时用不上,又不太会kirta中去水印)。最后想起python中试试。

思路:文本颜色(RGB)和水印颜色(RGB)不一样。

代码思路:我在代码中定义了一个名为removeFimage的函数,该函数接受三个参数:img_path(输入图像的路径),rgb_sum(每个像素RGB值之和的阈值)以及dest_path(保存处理后图像的输出路径)。

函数执行以下操作:

  1. 使用PIL库中的Image模块打开给定img_path处的图像。
  2. 获取图像的宽度和高度。
  3. 通过itertools.product(range(width), range(height))遍历图像中的每一个像素位置。
  4. 对于每个像素,获取其RGB值,并检查它们的和是否大于或等于rgb_sum
  5. 如果满足条件,则将该像素替换为白色(255, 255, 255)

当主程序运行时,调用这个函数并传入实际的图片路径、RGB总和阈值以及目标保存路径。具体来说,它会把RGB总和超过250的像素颜色替换成白色,并将处理后的图像保存在'D:/桌面/1a.png'路径下。

提醒:作者在这里已查看水印RGB=(87,87,87)

整体代码:

from PIL import Image
from tqdm import tqdm

def remove_pixels(img_path, rgb_sum_threshold, dest_path):
    def is_high_brightness(rgb):
        return sum(rgb) >= rgb_sum_threshold
    
    with Image.open(img_path) as img:
        width, height = img.size
        for x in tqdm(range(width), desc="Processing Columns"):
            for y in range(height):
                if is_high_brightness(img.getpixel((x, y))[:3]):
                    img.putpixel((x, y), (255, 255, 255))
    
    img.save(dest_path)

if __name__ == '__main__':
    remove_pixels('D:/桌面/1.png', 250, 'D:/桌面/1a.png')

当图片较多需要批量处理时:

from PIL import Image
from tqdm import tqdm
import os

def remove_pixels(img_path, rgb_sum_threshold, dest_path):
    def is_high_brightness(rgb):
        return sum(rgb) >= rgb_sum_threshold
    
    with Image.open(img_path) as img:
        width, height = img.size
        for x in tqdm(range(width), desc="Processing Columns"):
            for y in range(height):
                if is_high_brightness(img.getpixel((x, y))[:3]):
                    img.putpixel((x, y), (255, 255, 255))
    
    img.save(dest_path)

if __name__ == '__main__':
    root_dir = 'E:/pth'
    output_dir = 'E:/output'  # 设置输出目录
    rgb_sum_threshold = 250

    for i in range(1, 51):
        input_file = f'{root_dir}/作品{str(i).zfill(2)}.png'  # 格式化文件名
        output_file = f'{output_dir}/作品{str(i).zfill(2)}_processed.png'

        if os.path.exists(input_file):
            remove_pixels(input_file, rgb_sum_threshold, output_file)
        else:
            print(f"File {input_file} does not exist.")

当然当图片比较复杂或内容较多时效果比不上ps等专业软件(花费时间比较长,所有代码中加入了进度条)。同样的道理可以处理pdf,word等文件,若想提高速度可以尝试减少循环或者用:

  1. 并行处理:将图片分割为多个部分,利用多线程或多进程同时处理这些部分。Python中可以使用concurrent.futures模块实现。
  2. Numpy加速:如果可能的话,尝试将PIL图像转换为numpy数组进行操作,然后再转换回PIL图像。Numpy对大型数据的操作通常比纯Python更快。

留言:希望对你们有所帮助,若有疑问可以给B站up:Hikmatkar留言。

祝大家龙年吉祥,顺心如意。

  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
去除图片的彩色水印,可以使用Python编程语言和相应的图像处理库来实现。下面是一种可能的解决方案: 首先,我们需要导入Python的图像处理库PIL(Python Imaging Library)或者其增强版本Pillow,以便对图片进行处理。可以使用以下命令安装Pillow库: ``` pip install pillow ``` 然后,我们可以使用以下代码来去除彩色水印: ```python from PIL import Image # 加载图片 image = Image.open('image_with_watermark.jpg') # 将彩色图片转换为灰度图 gray_image = image.convert('L') # 去除水印 # 可以根据实际情况使用不同的方法,比如使用图像处理算法或者人工智能模型等 # 这里仅提供一个简单的示例,使用简单的阈值来将水印区域变为白色 threshold = 200 # 阈值,用于控制去除水印的效果 result_image = gray_image.point(lambda x: 255 if x > threshold else x) # 保存去除水印后的图片 result_image.save('image_without_watermark.jpg') ``` 上述代码,我们首先使用`Image.open()`方法加载带有水印图片,然后使用`convert('L')`方法将彩色图片转换为灰度图。接下来,我们可以根据实际情况使用不同的方法去除水印;这里仅提供一个简单的示例,使用`point()`方法将灰度值大于阈值的像素点变为白色。最后,我们使用`save()`方法保存去除水印后的图片。 需要注意的是,该解决方案仅提供了一个简单的示例,实际应用可能需要根据不同的水印特征和要求进行优化和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值