博客
关于我
OpenCV与AI深度学习 | 实战 | 文本图片去水印--同时保持文本原始色彩(附源码)
阅读量:791 次
发布时间:2023-02-23

本文共 1814 字,大约阅读时间需要 6 分钟。

OpenCV去除图片水印保留文本色彩的方法

本文将介绍两种去除图片水印的方法,重点分析如何在保留文本原始色彩的前提下有效去除水印。


1. 背景介绍

在OpenCV中,常用的去除水印方法是inpaint,通过图像修复来去除水印。然而,这种方法在处理含有文本的图片时效果不佳,因为修复过程会破坏文字信息。因此,我们需要更专门的方法来处理这种情况。


2. 使用亮度/对比度变换去除水印

2.1 方法分析

通过对比图片中的水印、文字和文本区域的RGB值,我们发现水印和文本的像素值存在明显差异。利用这一特性,我们可以通过调整对比度和亮度来去除水印。

  • 对比度调整:将对比度提高到2倍,水印区域的颜色会趋于消失。
  • 亮度调整:通过降低亮度(beta=-165),对文本区域进行补偿,使其颜色恢复接近原图。

2.2 代码实现

Python-OpenCV 实现代码:

import cv2import numpy as npimg = cv2.imread("mark.jpg")alpha = 2.0  # 对比度调整系数beta = -165  # 亮度调整系数result = alpha * img + betaresult = np.clip(result, 0, 255).astype(np.uint8)cv2.imwrite("result.png", result)print('Done!')

C++ OpenCV 实现代码:

#include 
#include
using namespace std;using namespace cv;int main() { Mat src = imread("mark.jpg"); if (src.empty()) { cout << "src img load failed!" << endl; return 1; } imshow("src", src); Mat result = 2.0 * src - 165; imshow("result", result); waitKey(); imwrite("result.png", result); return 0;}

2.3 优缺点对比

这种方法在去除水印时效果不错,但存在以下不足:

  • 部分文字颜色会发生明显变化,影响可读性。

3. 使用inRange方法保留文本色彩

为了更好地保留文本原始色彩,我们可以使用inRange方法获取水印区域,然后将其替换为原始文本颜色。

3.1 方法步骤

  • 获取水印区域:使用inRange方法获取与水印区域对应的掩码。
  • 替换水印区域颜色:将mask区域内的颜色替换为原始文本颜色。
  • 代码实现:

    import numpy as npimport cv2img = cv2.imread("kk.jpg")font = cv2.FONT_HERSHEY_SIMPLEX# 设定颜色范围(这里设定为白色区域)lower_hsv = np.array([160, 160, 160])upper_hsv = np.array([255, 255, 255])mask = cv2.inRange(img, lower_hsv, upper_hsv)# 调整mask以减少噪声mask = cv2.GaussianBlur(mask, (1, 1), 0)for i in range(img.shape[0]):    for j in range(img.shape[1]):        if mask[i, j] == 255:            img[i, j] = [255, 255, 255]cv2.imwrite('res.jpg', img)print('Done!')

    3.2 运行效果

    这种方法在去除水印的同时,较好地保留了文本的原始色彩。对比结果表明,文字颜色变化最小,效果更优。


    4. 方法总结

    • 亮度/对比度调整法:简单易行,但可能导致文字颜色变化。
    • inRange替换法:能更好地保留文本色彩,但需要手动设置颜色范围。

    选择哪种方法取决于具体图片特点和对效果的要求。


    文章结束,感谢阅读。如果有任何问题或建议,请在评论区留言!

    转载地址:http://wrsfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现基于事件对象实现线程同步(附完整源码)
    查看>>
    Objective-C实现基于文件流拷贝文件(附完整源码)
    查看>>
    Objective-C实现基于模板的双向链表(附完整源码)
    查看>>
    Objective-C实现基本二叉树算法(附完整源码)
    查看>>
    Objective-C实现备忘录模式(附完整源码)
    查看>>
    Objective-C实现复制粘贴文本功能(附完整源码)
    查看>>
    Objective-C实现复数类+-x%(附完整源码)
    查看>>
    Objective-C实现多组输入(附完整源码)
    查看>>
    Objective-C实现大根堆(附完整源码)
    查看>>
    Objective-C实现子集总和算法(附完整源码)
    查看>>
    Objective-C实现字符串IP地址转DWORD地址(附完整源码)
    查看>>
    Objective-C实现字符串jaro winkler算法(附完整源码)
    查看>>
    Objective-C实现字符串manacher马拉车算法(附完整源码)
    查看>>
    Objective-C实现字符串wildcard pattern matching通配符模式匹配算法(附完整源码)
    查看>>
    Objective-C实现字符串word patterns单词模式算法(附完整源码)
    查看>>
    Objective-C实现字符串Z 函数或 Z 算法(附完整源码)
    查看>>
    Objective-C实现字符串加解密(附完整源码)
    查看>>
    Objective-C实现字符串复制功能(附完整源码)
    查看>>
    Objective-C实现完整的ComplexNumber复数类(附完整源码)
    查看>>
    Objective-C实现将位转换为浮点数bitsToFloat算法(附完整源码)
    查看>>