簡體   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