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)