c语言编程笔录

您现在的位置是:首页 > 编程 > 编程经验

编程经验

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 )

文章评论