【问题标题】:OpenCV Python border removal preprocessing for OCROCR 的 OpenCV Python 边框去除预处理
【发布时间】:2020-01-11 12:17:02
【问题描述】:

我目前正在处理一个需要为 OCR 处理图像的项目。我设置了过滤器以使 OCR 的工作尽可能简单,但图像的一个方面我无法弄清楚如何修复。在包含的图像中,您可以看到我正在尝试阅读的文本(“PRTraining Tissue...”),并且图像周围有一个黑色边框,需要删除才能使我的歪斜校正代码起作用。有没有什么简单的方法可以在不影响文字的情况下快速用白色填充这个黑色边框?

未经过滤的图像:

过滤后的图像:

我已经编写了一些代码来去除大部分背景,但大的黑点仍然作为边框。包含的代码是我的图像裁剪脚本,它删除了大部分图像的黑色边框并尝试尽可能地隔离文本,但不幸的是,它仍然留下了相当多的黑色,与我的歪斜校正脚本相混淆。

def boarderRemoval(img):
    """
    Takes in a numpy array and crops the image down to isolate the text (Still leaves a small black border that varys from image to image\n
    Vars:\n
    - img <- numpy array of the label\n
    Returns:\n
    - Cropped down image with smaller black borders
    """
    contours, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    cnt = contours[0]
    x,y,w,h = cv2.boundingRect(cnt)
    correctedImage = img[y: y + h, x: x + w]

    return correctedImage

【问题讨论】:

  • 如果卡的位置是固定的,可以取图像的ROI,裁剪掉边框部分...
  • 不幸的是@DevashishPrasad 标签的位置不在固定的位置,并且从一个标签到另一个标签波动。我已经将图像裁剪为标签,删除了许多不必要的黑色像素,但仍然有一些像包含的图像中所示。
  • 不要使用边界矩形。使用卡片的填充轮廓作为蒙版图像,去除卡片的外部。

标签: python image opencv image-processing computer-vision


【解决方案1】:

从过滤后的图像开始,这是一个简单的方法

  • 将图像转换为灰度并查找轮廓
  • 在蒙版上绘制轮廓
  • 反转蒙版
  • 按位或原始图像

转换为灰度后,我们找到要保留的主要轮廓,并将此部分绘制到蒙版上。之后,我们反转遮罩,得到这张代表想要填充白色的边框部分的图像

现在我们只需cv2.bitwise_or() 与原始图像即可得到我们的结果

import cv2
import numpy as np

image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
mask = np.zeros(image.shape, dtype=np.uint8)

cnts = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]

cv2.fillPoly(mask, cnts, [255,255,255])
mask = 255 - mask
result = cv2.bitwise_or(image, mask)

cv2.imshow('mask', mask)
cv2.imshow('result', result)
cv2.waitKey(0)

【讨论】:

    猜你喜欢
    • 2015-06-14
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 2020-01-24
    • 2019-01-17
    • 2020-05-03
    • 2017-09-21
    • 2015-05-10
    相关资源
    最近更新 更多