我目前正在从事一个需要为 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个赞
从过滤后的图像开始,这是一个简单的方法
将图像转换为灰度并找到轮廓
在蒙版上绘制轮廓
反转蒙版
按位或原始图像
转换为灰度后,我们找到要保留的主要轮廓,并将此部分绘制到蒙版上。之后,我们反转遮罩来得到这个代表想要填充白色的边框部分的图像
现在我们简单地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)
添加回答
举报
0/150
提交
取消