2024-09-01
OpenCV
00

目录

传统方法
深度学习
译文回填

传统方法

程序

python
import numpy as np import cv2 def replaceZeroes(data): min_nonzero = min(data[np.nonzero(data)]) data[data == 0] = min_nonzero return data def SSR(src_img, size): L_blur = cv2.GaussianBlur(src_img, (size, size), 0) img = replaceZeroes(src_img) L_blur = replaceZeroes(L_blur) dst_Img = cv2.log(img / 255.0) dst_Lblur = cv2.log(L_blur / 255.0) dst_IxL = cv2.multiply(dst_Img, dst_Lblur) log_R = cv2.subtract(dst_Img, dst_IxL) dst_R = cv2.normalize(log_R, None, 0, 255, cv2.NORM_MINMAX) log_uint8 = cv2.convertScaleAbs(dst_R) return log_uint8 # 使用照片修复的办法来去掉图片中的文字 def remove_text1(path): size = 3 src_img = cv2.imread(path) # # 膨胀图片 # src_img = cv2.dilate(src_img, kernel=np.ones((3, 3), dtype=np.uint8), iterations=2) # 腐蚀图片 # src_img = cv2.erode(src_img, kernel=np.ones((3, 3), dtype=np.uint8), iterations=2) b_gray, g_gray, r_gray = cv2.split(src_img) b_gray = SSR(b_gray, size) g_gray = SSR(g_gray, size) r_gray = SSR(r_gray, size) ssrimg = cv2.merge([b_gray, g_gray, r_gray]) canny_img = cv2.Canny(ssrimg, 200, 150) k = np.ones((3, 3), np.uint8) mask = cv2.morphologyEx(canny_img, cv2.MORPH_CLOSE, k) # 闭运算 # 对mask进行膨胀 # mask = cv2.dilate(mask, kernel=np.ones((3, 3), dtype=np.uint8), iterations=6) dst = cv2.inpaint(src_img, mask, 3, cv2.INPAINT_TELEA) # dst = cv2.inpaint(dst, mask, 3, cv2.INPAINT_TELEA) # 膨胀 dst = cv2.dilate(dst, kernel=np.ones((3, 3), dtype=np.uint8), iterations=5) return dst # 使用mask直接填充颜色的办法来去掉图片中的文字 def remove_text2(path): size = 3 src_img = cv2.imread(path) # 腐蚀图片 # src_img = cv2.erode(src_img, kernel=np.ones((3, 3), dtype=np.uint8), iterations=2) b_gray, g_gray, r_gray = cv2.split(src_img) b_gray = SSR(b_gray, size) g_gray = SSR(g_gray, size) r_gray = SSR(r_gray, size) ssrimg = cv2.merge([b_gray, g_gray, r_gray]) canny_img = cv2.Canny(ssrimg, 200, 150) k = np.ones((3, 3), np.uint8) mask = cv2.morphologyEx(canny_img, cv2.MORPH_CLOSE, k) # 闭运算 # 保存mask为图片 cv2.imwrite("mask.png", mask) # mask等于1的区域,用白色填充 # dst = cv2.bitwise_and(src_img, src_img, mask=mask) src_img[mask == 255] = (255, 255, 255) # 膨胀 src_img = cv2.dilate(src_img, kernel=np.ones((3, 3), dtype=np.uint8), iterations=5) return src_img # 移除背景色,增强文字 def remove_ground(path): size = 3 src_img = cv2.imread(path) b_gray, g_gray, r_gray = cv2.split(src_img) b_gray = SSR(b_gray, size) g_gray = SSR(g_gray, size) r_gray = SSR(r_gray, size) ssrimg = cv2.merge([b_gray, g_gray, r_gray]) canny_img = cv2.Canny(ssrimg, 200, 150) k = np.ones((3, 3), np.uint8) mask = cv2.morphologyEx(canny_img, cv2.MORPH_CLOSE, k) # 闭运算 # mask等于1的区域,用白色填充 dst = cv2.bitwise_and(src_img, src_img, mask=mask) dst[mask == 0] = (255, 255, 255) return dst if __name__ == '__main__': imgPath = "papertext.jpg" dst = remove_text2(imgPath) cv2.imwrite("result.jpg", dst)

原图:

在这里插入图片描述

找到文字部分:

在这里插入图片描述

去除文字:

在这里插入图片描述

保留清晰文字:

在这里插入图片描述

深度学习

1、

Self-Supervised Text Erasing with Controllable Image Synthesis 即STE : 论文https://arxiv.org/abs/2204.12743

2、

EnsNet : https://blog.csdn.net/u013554402/article/details/104494261

3、

https://paperswithcode.com/paper/mtrnet-one-stage-mask-based-scene-text-eraser

4、

http://www.cjig.cn/html/jig/2022/4/20220420.htm

译文回填

SickZil-Machine用于去除文本: https://github.com/KUR-creative/SickZil-Machine

lama-cleaner技术: https://github.com/Sanster/lama-cleaner

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!