繁体   English   中英

如何从python的印刷教科书中删除突出显示?

[英]How do i remove highlight from a printed text book in python?

我正在从教科书中提取突出显示的文本。 我已经完成了定位突出显示并提取其中的文本的操作。 为了处理高光,我将图像转换为灰度并使用OTSU阈值去除了背景高光颜色。 当高亮是浅色(例如黄色或绿色)时,这非常有用,但是当高亮是深色时,阈值设置失败,并且我得到覆盖大部分文本的黑色背景,这会妨碍ocr阅读。

我曾尝试将亮度归一化,但似乎不起作用。

我需要的是一种确定前景色和背景色,然后删除背景色的方法。 或者我需要某种方法来动态限制图像以获取黑色文本和白色背景。

        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        normalized_gray = cv2.equalizeHist(gray)
        (thresh, processed_image) = cv2.threshold(normalized_gray, 127, 255, cv2.THRESH_OTSU)

测试图像: https : //ibb.co/856YtMx

一些测试结果:

当我在阈值之前运行equalizeHist时。 https://ibb.co/HT0jpKW

当我阈值后运行equalizeHist时。 https://ibb.co/ZXSz97J

当我使用二进制阈值时,文本被吹走: https : //ibb.co/DLXywXz

例如这样的事情应该工作:

import cv2
import numpy as np

image = cv2.imread('photo-2019-08-12-12-44-59.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# adjust contrast
gray_contract = cv2.multiply(gray, 1.5)

# create a kernel for the erode
kernel = np.ones((2, 2), np.uint8)
img_eroded = cv2.erode(gray_contract, kernel, iterations=1)

# binarize with otsu
(thresh, otsu) = cv2.threshold(img_eroded, 127, 255,
                               cv2.THRESH_BINARY+cv2.THRESH_OTSU)

在此处输入图片说明

您也可以看一下帖子如何使用OpenCV从扫描的图像中去除阴影

此处需要自适应阈值。

我的输出与代码。 可以微调。

输出

import cv2
import numpy as np

img = cv2.imread("high.jpg")

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

gaus = cv2.adaptiveThreshold(img_gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 20)

cv2.imshow("Gaussian", gaus)
cv2.waitKey(0)

cv2.imwrite('output.png', gaus)

更新

将参数更改为adaptiveThreshold函数,即您发布的第二张图像。

gaus = cv2.adaptiveThreshold(img_gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 8)

输出2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM