乐于分享
好东西不私藏

使用OpenCV去除文档水印(附源码)

使用OpenCV去除文档水印(附源码)

点击下方卡片,关注“机器视觉与AI深度学习”

视觉/图像重磅干货,第一时间送达!

    水印对于保护知识产权很重要,但有时也会造成阻碍。如果您正在处理文档、书籍或其他扫描材料的图像,您可能希望删除这些水印以供个人使用、修复或研究。本文将介绍如何使用 Python、OpenCV 和 Tkinter 从文档图像中删除水印。
实现步骤

    现在,让我们分解用于从文档图像中删除水印的 Python 代码。该代码结合了用于图像处理的 OpenCV、用于 GUI 交互的 Tkinter 和用于可视化的 Matplotlib。

1. 安装库并导入必要的库
pip install opencv-python pillow matplotlib numpy
# imported necessary libraryimport tkinterfrom tkinter import *import tkinter as tkimport tkinter.messagebox as mboxfrom tkinter import ttkfrom tkinter import filedialogfrom PIL import ImageTk, Imageimport cv2import osimport matplotlib.pyplot as plt
    在这里,我们导入所有需要的库。
    • tkinter:这是用于创建图形用户界面 (GUI) 的标准 Python 库。我们将使用它来构建一个简单的 GUI,用于文件处理和用户交互。
    • cv2:这是用于图像处理的OpenCV库。它提供各种图像处理功能。
    • matplotlib.pyplot:用于在窗口中显示图像以实现可视化。
    • PIL:Python 图像库,用于处理和转换图像文件。
2. 设置工作目录
#images folder pathos.chdir("images")
    这会将工作目录更改为包含图像的文件夹。它允许脚本轻松找到图像。确保路径正确并且图像存储在目录中"images"。
  3. 设置全局变量
click1 = Falsepoint1 = (0, 0)img = None
    这些全局变量对于跟踪鼠标点击状态和正在处理的图像至关重要。具体来说:
    • click1:跟踪鼠标是否被点击。
    • point1:存储第一次点击的坐标。
    • img:存储正在处理的图像。
4. 处理鼠标事件进行裁剪
def click(event, x, y, flags, params):    global click1, point1, img    if event == cv2.EVENT_LBUTTONDOWN:        click1 = True        point1 = (x, y)    elif event == cv2.EVENT_MOUSEMOVE and click1:        img_copy = img.copy()        cv2.rectangle(img_copy, point1, (x, y), (0, 0, 255), 2)        plt.imshow(cv2.cvtColor(img_copy, cv2.COLOR_BGR2RGB))        plt.show()    elif event == cv2.EVENT_LBUTTONUP:        click1 = False        sub_img = img[point1[1]:y, point1[0]:x]        plt.imshow(cv2.cvtColor(sub_img, cv2.COLOR_BGR2RGB))        plt.show()
    此函数处理鼠标事件以选择图像上的感兴趣区域 (ROI)。其工作原理如下:
    • cv2.EVENT_LBUTTONDOWN:当按下鼠标左键时,记录起始坐标。
    • cv2.EVENT_MOUSEMOVE:当按下左键并移动鼠标时,它会在图像的副本上动态绘制一个矩形,显示所选区域。
    • cv2.EVENT_LBUTTONUP:一旦释放鼠标左键,就会显示图像的选定部分。
    这使得用户能够直观地选择他们想要关注的图像部分,例如删除特定的水印。
    5. 加载和保存图像
defopen_and_save_img(img_path):global img    img = cv2.imread(img_path, 1)    plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))    plt.show()    img1 = cv2.imread(img_path)    _, thresh = cv2.threshold(img1, 150, 255, cv2.THRESH_BINARY)    plt.imshow(cv2.cvtColor(thresh, cv2.COLOR_BGR2RGB))    plt.show()# Saving the images without watermark    cv2.imwrite('Image_With_Watermark.jpg', img)    cv2.imwrite('Image_Without_Watermark.jpg', thresh)
    该函数执行以下任务:
1. 加载图像:
    它使用 从给定的文件路径读取图像cv2.imread()。
    使用 Matplotlib 显示图像,将颜色从 BGR(OpenCV 使用)转换为 RGB 以实现正确的可视化。
2. 对图像进行阈值处理:
    阈值处理用于将图像转换为二进制形式(黑白)。该cv2.threshold()函数应用了 150 的阈值。这种二进制转换可以帮助隔离水印,使其更容易去除。
3. 保存图像:
    原始图像保存为“Image_With_Watermark.jpg”。
    处理后的(二进制)图像将保存为“Image_Without_Watermark.jpg”。此图像将删除或最小化水印。
 5. main函数
defmain():    img_path = "1e958f1c-book_229.jpg"# Change this to your image path    open_and_save_img(img_path)if __name__ == "__main__":    main()

    源码和素材下载:
https://github.com/mdmonsurali/Document-AI/blob/main/Denoising%20technique/Watermark%20remove/watermark_remove.ipynb

—THE END—

觉得有用,麻烦给个赞和在看

相关学习资料