为了账号安全,请及时绑定邮箱和手机立即绑定

OCR 的 OpenCV Python 边框去除预处理

OCR 的 OpenCV Python 边框去除预处理

慕斯王 2022-05-24 16:54:43
我目前正在从事一个需要为 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
查看完整描述

1 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

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

  • 将图像转换为灰度并找到轮廓

  • 在蒙版上绘制轮廓

  • 反转蒙版

  • 按位或原始图像


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

//img1.sycdn.imooc.com//628c9d840001a6a403260300.jpg

现在我们简单地cv2.bitwise_or()用原始图像来得到我们的结果


//img1.sycdn.imooc.com//628c9d8f00017cdd03220297.jpg

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)


查看完整回答
反对 回复 2022-05-24
  • 1 回答
  • 0 关注
  • 403 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号