PS怎么去掉公章里的黑字
郑伊雯 2023-07-09编程经验
段落1:问题背景与实现思路在日常办公和业务活动中,我们经常会遇到需要盖章的情况。虽然电子文档越来越普遍,但一些纸质文件仍然需要加盖公章。但是,在印章上往往需要加上许多额外的信息,如印章名称、印章编号、制章单位、使用单位等等,这些信息会在
段落1:问题背景与实现思路
在日常办公和业务活动中,我们经常会遇到需要盖章的情况。虽然电子文档越来越普遍,但一些纸质文件仍然需要加盖公章。但是,在印章上往往需要加上许多额外的信息,如印章名称、印章编号、制章单位、使用单位等等,这些信息会在文件被扫描或复印后留下黑字痕迹,影响文档的美观度和可读性。因此,本文将讨论如何解决这个问题。
实现思路:
1. 通过图像处理和识别技术,识别公章内容,去掉黑色字体,保留红色章体,生成新的印章图片。
2. 应用OCR(Optical Character Recognition,光学字符识别)技术,在识别公章内容的同时,对文本进行字符分割和识别,去掉黑色字体后把红色章体对应的内容恢复到文本中。
本文将重点介绍第二种实现思路。
第一种实现思路:图像处理和识别
图像处理和识别需要用到识别库和图像处理库,如Pillow和pytesseract。
from PIL import Image import pytesseract def remove_black_text(file): img = Image.open(file) img = img.convert('L') img.show() pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files/Tesseract-OCR/tesseract' text = pytesseract.image_to_string(img, lang='chi_sim') print(text)段落2:具体实现方式
第二种实现思路:OCR字符识别
字符识别需要用到OCR库,常用的有Tesseract和ABBY,这里以Tesseract为例。
import pytesseract from PIL import Image import cv2 import numpy as np def remove_black_text(file): image = cv2.imread(file) # 先将图像转为灰度图像 gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 二值化处理 ret, binary = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY) # 去除倾斜角度 contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) rect = cv2.minAreaRect(contours[0]) angle = rect[-1] rows, cols, ch = image.shape if angle < -45: angle = 90 + angle M = cv2.getRotationMatrix2D((cols / 2, rows / 2), angle, 1) image = cv2.warpAffine(image, M, (cols, rows)) # 提取印章轮廓 image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) edges = cv2.Canny(image_gray, 120, 240) contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 获取公章中心坐标 x_average, y_average = 0, 0 for i in range(len(contours)): for k in range(len(contours[i])): x_average += contours[i][k][0][0] y_average += contours[i][k][0][1] center_x = int(x_average / len(contours)) center_y = int(y_average / len(contours)) # 获取印章文本 img = Image.open(file) img = img.convert('L') pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files/Tesseract-OCR/tesseract' text = pytesseract.image_to_string(img, lang='chi_sim') # 在原图中用橙色覆盖黑色字体,并在下面的文本区域中高亮标注 for i, c in enumerate(text): if c == ' ' or c == '\n' or c == '\r': continue if c.isalnum(): continue else: rect = cv2.boundingRect(contours[i]) if (center_x - rect[0]) * (center_x - rect[0]) + (center_y - rect[1]) * (center_y - rect[1]) < 200 * 200: img = Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) color = (255, 200, 0) thickness = -1 cv2.rectangle(image, rect, color, thickness) cv2.rectangle(image, (rect[0], rect[1]), (rect[0] + rect[2], rect[1] + rect[3]), color, thickness) else: img = Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) color = (0, 0, 255) thickness = 3 cv2.rectangle(image, rect, color, thickness) cv2.rectangle(image, (rect[0], rect[1]), (rect[0] + rect[2], rect[1] + rect[3]), color, thickness) return image段落3:解释代码实现的运行流程及实现原理 OCR(Optical Character Recognition,光学字符识别)技术是指将图像信息转化为文本信息的过程,它是一种结合计算机视觉和自然语言处理技术的应用。在Python中,使用OCR技术可以很方便地处理图像中的文字,包括识别、分割、过滤等。OCR还可以根据识别出的文字,通过回溯算法生成文本,这就是我们去掉黑色字体的关键操作。 分析上述代码,remove_black_text()函数首先读取图片文件,然后将其转换为灰度图像(gray_image)。接着,应用二值化处理(threshold),将灰度图像转为二值图像,将图片中的黑白原色进行了颠倒。当图像中白色部分多于黑色部分时候,图片的黑色部分会被转换为白色,白色部分反之。二值图像处理后,使用findContours()函数查找公章轮廓。接下来,按照原图中的角度将印章调整成水平状态,再提取印章中的文本,使用pytesseract库进行OCR处理,将印章中的文本逐个字符地进行提取、识别和判断,如果字符是黑色字体,则将其标记为需要去除的部分。为了标记方便,使用cv2.rectangle函数在图片中用橙色覆盖黑色字体,并在下面的文本区域中高亮标注。 最后,函数返回经过处理后的图片。 段落4:总结与反思 本文介绍了两种主流的去除公章黑字的方法,包括图像处理和OCR字符识别。实际应用中,可以根据具体需求选择相应的方法,如采用OCR技术会比较快捷和精准,而图像处理方法则更适用于印章复杂、特殊情况。无论采用哪种方法,我们需要掌握图像处理和OCR的基本原理和编程技术,同时还需周密计划,并根据实际情况对方案进行调整,保证最终实现的效果和质量达到与预期相符合。(本篇文章参考 https://www.middleware360.com/Document.aspx?g=q&k=xrf0n7qgejz )
很赞哦! ()