簡體   English   中英

如何在 Python 中將前景文本與嘈雜背景分開?

[英]How to separate foreground text from noisy background in Python?

我正在嘗試從此圖像中提取文本

這個圖片 .

我嘗試使用 OpenCV 調整對比度和亮度、平滑(例如高斯模糊、中值模糊)和閾值技術(例如 Otsu),仍然有很多剩余的噪聲。

還有什么我可以嘗試的嗎?

您可以嘗試結合使用高斯模糊、閾值處理和形態學操作來隔離文本。 這是一個管道

模糊->閾值->打開->膨脹->按位與

在此處輸入圖像描述 在此處輸入圖像描述 在此處輸入圖像描述 在此處輸入圖像描述 在此處輸入圖像描述

import cv2

image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (7,7), 0)
thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,2))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=3)

# Repair text
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7,7))
dilate = cv2.dilate(opening, kernel, iterations=2)

# Bitwise-and with input image
result = cv2.bitwise_and(image,image,mask=dilate)
result[dilate==0] = (255,255,255)

cv2.imshow('thresh', thresh)
cv2.imshow('opening', opening)
cv2.imshow('dilate', dilate)
cv2.imshow('result', result)
cv2.waitKey()

如果需要更通用的解決方案,請繼續閱讀。 否則,您可以參考 nathancy 的答案,或本網站中的許多其他答案。


我假設

從此圖像中提取文本

表示您希望將此圖像中的文本作為字符串或文本的 ROI。

這稱為 OCR(光學字符識別),是一個非常復雜的深度學習問題,專門針對您發布的圖像類型(嘈雜、低清晰度、低動態范圍等)。 如果您正在尋找可以開箱即用的普通 OpenCV 庫,那么據我所知,沒有。

檢查這些鏈接以獲取源代碼和解釋 -

  1. 使用 pytesseract 進行 OCR
  2. 使用 EAST 檢測文本 ROI

暫無
暫無

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM