猿问

OCR 的 OpenCV Python 边框去除预处理

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

未过滤的图像:

过滤图像:


http://img.mukewang.com/628c9d6e00015f5806060528.jpg

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


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


慕斯王
浏览 405回答 1
1回答

白衣非少年

从过滤后的图像开始,这是一个简单的方法将图像转换为灰度并找到轮廓在蒙版上绘制轮廓反转蒙版按位或原始图像转换为灰度后,我们找到要保留的主要轮廓,并将此部分绘制到蒙版上。之后,我们反转遮罩来得到这个代表想要填充白色的边框部分的图像现在我们简单地cv2.bitwise_or()用原始图像来得到我们的结果import cv2import numpy as npimage = 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 - maskresult = cv2.bitwise_or(image, mask)cv2.imshow('mask', mask)cv2.imshow('result', result)cv2.waitKey(0)
随时随地看视频慕课网APP

相关分类

Python
我要回答