当前位置: 首页 > news >正文

除掉彩色水印的简单方法

有一张下面这样的彩色图片,白底黑字上有蓝色水印:

用photoshop之类软件处理特别麻烦,上网找去背景网站消除或者相关AI工具效果也不一定好,特别是如果这种图片有一整本数百页的书,那就更麻烦。考虑到这种水印的颜色与文字相比差异很大,因此,可以考虑利用OpenCV将其转换为hsv模式,这时候会发现水印部分的v值比文字部分的v值(可以在gimp或者photoshop中查看)大得多,用python代码处理起来就很方便了。如下代码可将上面的示例图片中的蓝色水印消除:

import cv2
import numpy as np

def remove_color_watermark(image_path, thres):

    """    
        :param image_path: 图片路径
        :param thres: V值的阈值
        :return: 除掉水印后的图片
    """

    # 读取图片
    img = cv2.imread(image_path)
    if img is None:
        print("无法读取图片,请检查图片路径。")
        return

    # 转换到HSV颜色空间
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    # 某像素点的V值大于阈值则将其转换为白色
    img[hsv[:, :, 2] > thres ] = [255, 255, 255]
    return img

# 请替换为你的图片路径
image_path = f"path\\to\\orig\\img.jpg"
result = remove_color_watermark(image_path, 230)

if result is not None:
    # 显示原始图片和处理后的图片
    cv2.imshow('Original Image', cv2.imread(image_path))
    cv2.imshow('Processed Image', result)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    # 保存处理后的图片
    cv2.imwrite('processed_image.jpg', result)

处理效果如下:

似乎还是很不错的。下面的代码可以将整个文件夹中所有相同水印的图片处理后输出为一个pdf文件:

import cv2
import os

from PIL import Image

def remove_color_watermark(image_path, thres):

    # 读取图片
    img = cv2.imread(image_path)
    if img is None:
        print("无法读取图片,请检查图片路径。")
        return

    # 转换到HSV颜色空间
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    # 某像素点的v值大于阈值则将其转换为白色
    img[hsv[:, :, 2] > thres] = [255, 255, 255]
    return img


if __name__ == '__main__':
    image_path = 'folder\\path\\to\\orig'
    out_path = 'path\\to\\output\\folder'
    thresh = 230
    images = []
    for filename in os.listdir(image_path):
        if filename.endswith(('.jpg', '.jpeg', '.png', '.bmp', '.tiff')):
            img = remove_color_watermark(os.path.join(image_path, filename), thresh)
            img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
            # OpenCV图片转换为pillow图片
            pillow_image = Image.fromarray(img)
            print(f'{filename}已经处理完毕。')
            # 加入pillow图片数组,为输出PDF文件做准备
            images.append(pillow_image)
    # 将处理后的图片输出为PDF文件
    images[0].save(os.path.join(out_path,'output.pdf'), save_all=True, append_images=images[1:])

相关文章:

  • GlusterFS卷管理实战指南:从扩展卷到自我修复,全面掌握高效运维技巧
  • Kafka在Windows系统使用delete命令删除Topic时出现的问题
  • 【Java八股文】09-计算机操作系统面试篇
  • 虚拟机设置代理
  • VMamba论文精读笔记
  • CMake管理依赖实战:多仓库的无缝集成
  • 在windows下安装windows+Ubuntu16.04双系统(下)
  • go WEB框架
  • Git 合并冲突解决与状态分析笔记
  • 发现问题 python3.6.13+django3.2.5 只能以asgi启动server 如何解决当前问题
  • rust笔记1-学习资料推荐
  • C#设计模式 学习笔记
  • OpenProject项目管理系统
  • 如何在Windows 10操作系统中安装并配置PHP集成软件XAMPP
  • 微前端qiankun打包部署
  • js 跳出循环
  • Moonshot AI 新突破:MoBA 为大语言模型长文本处理提效论文速读
  • java项目引用sevenzipjbinding依赖报错问题
  • Linux基础开发工具的使用(apt、vim、gcc、g++、gdb、make、makefile)
  • 代码审计入门学习之sql注入
  • 美国与卡塔尔签署超2435亿美元经济及军事合作协议
  • 北洋“修约外交”的台前幕后——民国条约研究会档案探研
  • 图集︱“中国排面”威武亮相
  • 春秋航空:如果供应链持续改善、油价回落到合理水平,公司补充运力的需求将会增长
  • 阿里CEO:将以饱和式投入打法,聚焦几大核心战役
  • 第一集|《刑警的日子》很生活,《执法者们》有班味