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

1. 基于 inpaint 方法(網(wǎng)上的方法,處理質(zhì)量較低)

  • 算法理論:基于Telea在2004年提出的基于快速行進的修復算法(FMM算法),先處理待修復區(qū)域邊緣上的像素點,然后層層向內(nèi)推進,直到修復完所有的像素點
  • 處理方式:由ui人員制作出黑底白色水印且相同位置的水印蒙版圖(必須單通道灰度圖),然后使用inpaint方法處理原始圖像,具體使用時可把水印區(qū)放粗,這樣處理效果會好點
# -*- coding: utf-8 -*-
# @Time    : 2017/11/24
# @Author  : fc.w
# @File    : wipe_watermark.py
import cv2
# 默認的彩色圖(IMREAD_COLOR)方式讀入原始圖像
src = cv2.imread('src.jpg')  
# 灰度圖(IMREAD_GRAYSCALE)方式讀入水印蒙版圖像
mask = cv2.imread('mask.png', cv2.IMREAD_GRAYSCALE) 

# 參數(shù):目標修復圖像; 蒙版圖(定位修復區(qū)域); 選取鄰域半徑; 修復算法(包括INPAINT_TELEA/INPAINT_NS, 前者算法效果較好)
dst = cv2.inpaint(src, mask, 3, cv2.INPAINT_TELEA)

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

效果展示

原始圖:src.jpg
原始圖
蒙版圖:mask.jpg
蒙版圖
INPAINT_TELEA算法處理效果:
INPAINT_TELEA算法處理效果
INPAINT_NS算法處理效果:

INPAINT_NS算法處理效果

細致比較的話,INPAINT_TELEA算法處理,水印的隱去效果會稍好點

2. 基于像素的反色中和(處理質(zhì)量較高)

參考自ps去水印原理,通過一張白底的反色水印圖來中和原圖水印

# -*- coding: utf-8 -*-
# @Time    : 2017/11/24
# @Author  : fc.w
# @File    : wipe_watermark.py
import cv2
import numpy

src = cv2.imread('src.jpg')
mask = cv2.imread('mask.png')
# 創(chuàng)建一張空圖像用于保存
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.jpg
原始圖
反色水印圖:mask.jpg
反色水印圖:
效果圖
效果圖
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容