欢迎来到站圈网!

php媒体摇摇远程七牛node

投稿中心

C 语言

当前位置: 主页 > 编程语言 > C 语言

Opencv使用对比度亮度变换删除水印

时间:2021-11-25|栏目:C 语言|点击:
    内容页广告位

导读

本文主要介绍使用OpenCV亮度/对比度变换来去除图片水印的实例。

背景介绍

OpenCV中去除水印最常用的方法是inpaint,通过图像修复的方法来去除水印,最终效果也要根据实际图像来看(时好时坏)。有些图像并不适用inpaint方法来去除水印,比如下面的这种包含文本的图像中的水印,即便提供了水印的mask图,修复后也会丢失文字信息,这并不是我们想要的。

OpenCV利用对比度亮度变换实现水印去除

那么问题来了,上面图像中的水印该如何去除?有没有一种通用方法,能很好去除这些水印?答案是:没有通用方法,只能具体问题具体分析!

实现步骤

仔细观察上面的图像并分析文本与水印的像素值不难发现,图中文本和水印的灰度值或者RGB值有明显差异:

【1】图案水印RGB值(取样值:239,236,253)

OpenCV利用对比度亮度变换实现水印去除

【2】文字水印RGB值(取样值:215,215,215)

OpenCV利用对比度亮度变换实现水印去除

【3】文本RGB值(取样值:114,112,125)

OpenCV利用对比度亮度变换实现水印去除

接下来对图像做对比度和亮度变换:

result = alpha * src - beta (alpha = 2.0, beta = -165)

提高对比度*2时水印消失,然后降低亮度做补偿:

Python-OpenCV实现代码:

import cv2
import numpy as np


img = cv2.imread("mark.jpg")
alpha = 2.0
beta = -165
result= alpha * img + beta
result= np.clip(result, 0, 255).astype(np.uint8)
cv2.imwrite("result.png", result)

C++ OpenCV实现代码:

#include <iostream>
#include <opencv2/opencv.hpp>


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;
}

运行结果图:

OpenCV利用对比度亮度变换实现水印去除

原图与结果图对比:

OpenCV利用对比度亮度变换实现水印去除

以上就是OpenCV利用对比度亮度变换实现水印去除的详细内容,更多关于OpenCV去水印的资料请关注站圈网其它相关文章!

版权声明:本文内容由小编收集网络,均来自网络用户自发贡献,版权归原作者所有,站圈网不拥有其著作权,亦不承担相应法律责任。具体规则请查看《站圈网用户服务协议》和《站圈网知识产权保护指引》。如果您发现本站中有涉嫌抄袭的内容,填写联系本站管理员,一经查实,管理员将立刻删除涉嫌侵权内容。

上一篇:C++;QT实现音频和视频播放功能

下一篇:C语言中有趣的Narcissus数编程

本文标题:Opencv使用对比度亮度变换删除水印

本文地址:https://www.zhano.cn/Clang/52458.html

AD300

广告投放 | 联系我们 | 版权申明 | SiteMap

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:15234109 | 邮箱:15234109#qq.com(#换成@)

Copyright © 2019-2021 豫ICP备19001789号