1. 程式人生 > >兩種Python基於OpenCV的固定位置半透明水印去除方案

兩種Python基於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)

2. 估算alpha值,然後逆向運算

save = img.copy() #複製影象
src = img

alpha=51.0/255.0

for row in range(src.shape[0]):
for col in range(src.shape[1]):
if img_mask[row, col].all() !=0:
save[row, col]=(src[row, col]-alpha* img_mask[row, col])/(1-alpha)