[英]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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.