两种Python基于OpenCV的固定位置半透明水印去除方案

OpenCV基础

OpenCV(Open Source Computer Vision Library)是一个跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法

环境搭建
#python沙箱环境
virtualenv opencvenv
source opencvenv/bin/activate

pip install cryptography ndg-httpsclient #某些python版本需要的几个兼容包

pip install numpy #opencv的依赖

#我这里直接pip安装pyopencv不成功
#换其他方法,直接从yum包里拷贝opencv的python wrapper
sudo yum install opencv-python
cp /usr/lib64/python2.7/site-packages/cv* opencv_test/cvenv/lib64/python2.7/site-packages/
opencv的常用操作
# -*- coding: utf-8 -*-
import cv2

#矩阵形式读取图像为三维列表,每一维分别代表 行、列、像素,像素维度列表中依次为BGR三个颜色通道
img = cv2.imread("test.jpg")

print img.shape #利用numpy的shape方法显示图像矩阵的三维尺寸信息,例如:(533, 800, 3)

img2 = img.copy() #复制图像
cv2.imwrite('save.jpg', img2) #保存

基于OpenCV的两种去水印方案

1. 基于 inpaint 方法(网上的方法,处理质量较低)
  • 算法理论:基于Telea在2004年提出的基于快速行进的修复算法(FMM算法),先处理待修复区域边缘上的像素点,然后层层向内推进,直到修复完所有的像素点
  • 处理方式:由ui人员制作出黑底白色水印且相同位置的水印蒙版图(必须单通道灰度图),然后使用inpaint方法处理原始图像,具体使用时可把水印区放粗,这样处理效果会好点
# -*- coding: utf-8 -*-
import cv2

src = cv2.imread('src.jpg')  # 默认的彩色图(IMREAD_COLOR)方式读入原始图像
mask = cv2.imread('mask.jpg', cv2.IMREAD_GRAYSCALE)  # 灰度图(IMREAD_GRAYSCALE)方式读入水印蒙版图像

# 参数:目标修复图像; 蒙版图(定位修复区域); 选取邻域半径; 修复算法(包括INPAINT_TELEA/INPAINT_NS, 前者算法效果较好)
dst = cv2.inpaint(src, mask, 3, cv2.INPAINT_TELEA)

cv2.imwrite('result.jpg', dst)

效果演示
src图:
src图像
mask图:
mask图像

INPAINT_TELEA算法处理效果:
telea算法
INPAINT_NS算法处理效果:
ns算法

细致比较的话,INPAINT_TELEA算法处理,水印的隐去效果会稍好点

2. 基于像素的反色中和(处理质量较高)

参考自ps去水印原理,通过一张白底的反色水印图来中和原图水印

# -*- coding: utf-8 -*-
import cv2
import numpy

src = cv2.imread('src.jpg')
mask = cv2.imread('mask.png')
save = numpy.zeros(src.shape, numpy.uint8) #创建一张空图像用于保存

for row in range(src.shape[0]):
    for col in range(src.shape[1]):
        for channel in range(src.shape[2]):
            if mask[row, col, channel] == 0:
                val = 0
            else:
            	reverse_val = 255 - src[row, col, channel]
                val = 255 - reverse_val * 256 / mask[row, col, channel]
                if val < 0: val = 0

            save[row, col, channel] = val

cv2.imwrite('result.jpg', save)

src图:
输入图片说明
反色水印图:
输入图片说明
输出效果图:
输入图片说明

转载于:https://my.oschina.net/u/2400083/blog/732321

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值