簡體   English   中英

opencv python - 去除二值化圖像中的小點噪聲

[英]opencv python - remove small points noise in binarized image

我正在做一個文檔閱讀器,將其中的所有文本解析為谷歌電子表格,這個腳本應該可以節省我的工作時間,問題是二進制圖像有很多噪音(文本周圍的小點)混淆了 pytesseract . 我怎樣才能消除這種噪音? 我用來二值化圖像的代碼是:

import pytesseract
import cv2
import numpy as np
import os
import re
import argparse

#binarization of images
def binarize(img):
    #convert image to grayscale
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    #apply adaptive thresholding
    thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)
    #return thresholded image
    return thresh

#construct argument parser
parser = argparse.ArgumentParser(description='Binarize image and parse text in image to string')
parser.add_argument('-i', '--image', help='path to image', required=True)
parser.add_argument('-o', '--output', help='path to output file', required=True)
args = parser.parse_args()

# load image
img = cv2.imread(args.image)

#binarization of image
thresh = binarize(img)


#show image
cv2.imshow('image', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()

#save image
cv2.imwrite(args.output+'/imagen3.jpg', thresh)

我要清理的結果圖像是: 二值化圖像

如果我應用侵蝕,這就是結果: 在此處輸入圖像描述

哪個比另一個最差

編輯:原始圖像是: 原來的

您只需要在 Python/OpenCV 中增加自適應閾值 arguments。

輸入:

在此處輸入圖像描述

import cv2

# read image
img = cv2.imread("petrol.png")

# convert img to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# do adaptive threshold on gray image
thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 21, 25)

# write results to disk
cv2.imwrite("petrol_threshold.png", thresh)

# display it
cv2.imshow("THRESHOLD", thresh)
cv2.waitKey(0)

結果:

在此處輸入圖像描述

暫無
暫無

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

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