OpenCV将所有文本处理为白底黑字(分割)。

2 人关注

有没有可能使文件中的所有文字在阈值化后都是白底黑字。我在网上找了很多,但一直没有找到解决办法。我目前的阈值图像是。 https://i.ibb.co/Rpqcp7v/thresh.jpg

该文件需要被OCR读取,为此我需要将目前黑底白字的区域倒置。我怎样才能做到这一点?我目前的代码。

# thresholding
def thresholding(image):
    # thresholds the image into a binary image (black and white)
    return cv2.threshold(image, 120, 255, cv2.THRESH_BINARY)[1]
    
4 个评论
为什么普通的OCR在你目前的阈值下不能工作?这些图像不应该被检测到,因此不应该是一个问题?
我只是注意到,很多时候读出的数据是错误的。所以我有几种预处理的方法,它在最后挑选出置信度最高的结果,通常这种方式的结果要好很多。只是这仍然是我遇到的主要障碍。
也许可以试试这个方法,从图像中只得到文字,然后再运行你的OCR。 stackoverflow.com/a/54125216/9178557
我已经试过反向阈值处理,但它不能解决这个问题,对吗?除非我能够以某种方式合并所得到的图像(从每张图像中提取白色背景区域)。
python
opencv
ocr
Sander Berntsen
Sander Berntsen
发布于 2021-11-03
1 个回答
Christoph Rackwitz
Christoph Rackwitz
发布于 2021-11-04
已采纳
0 人赞同

使用中值过滤器来估计主导颜色(背景)。

然后从中减去图像......你会得到黑色背景上的白色文字。我正在使用 绝对的 差异。白底黑字的反转。

im = cv.imread("thresh.jpg", cv.IMREAD_GRAYSCALE)
im = cv.pyrDown(cv.pyrDown(im)) # picture too large for stack overflow
bg = cv.medianBlur(im, 51) # suitably large kernel to cover all text