使用adaptiveThreshold后如何将图像中的字符恢复到完全清晰?

问题描述 投票:0回答:1

我进行了图像预处理以获得用于文本提取的良好图像,但是在应用

adaptiveThreshold
处理后,我发现字符不完整。比如有的像素太大,有的像素太小,有的像素缺失,导致字符不完整、不清晰。

这是问题发生之前我的代码。

import cv2
import numpy as np

imRGB = cv2.imread('D:\\Senior-project\\images\\024.jpg')
print(imRGB.shape)

imGray = cv2.cvtColor(imRGB, cv2.COLOR_BGR2GRAY)
print(imGray.shape)

blur = cv2.GaussianBlur(imGray, (3,3), 0)
cv2.imwrite('blur.jpg', blur)

contrast = cv2.convertScaleAbs(blur, alpha=1.5, beta=0)
cv2.imwrite('contrast.jpg', contrast)

thresh = cv2.adaptiveThreshold(contrast, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 7)
cv2.imwrite('thresh.jpg', thresh)

My original image

thresh.jpg

The image showing the character issues I mentioned

我尝试使用形态学运算来解决这个问题。

kernel = np.array([[0,1,0], [1,1,1], [0,1,0]], np.uint8)

img_erosion = cv2.erode(thresh, kernel, iterations=1)
cv2.imwrite('img_erosion.jpg', img_erosion)

img_dilation = cv2.dilate(img_erosion, kernel, iterations=1)
cv2.imwrite('img_dilation.jpg', img_dilation)

但是,使用Erosion操作似乎会导致字符变得过于放大,导致图像中字符不完整、不清晰。同样,当腐蚀之后再应用膨胀操作来腐蚀并缩小物体的尺寸时,结果只会使字符变得更加不完整。

img_erosion.jpg

img_dilation.jpg

使用

adaptiveThreshold
后,有什么方法可以将图像中的文字恢复完整清晰吗?我尝试了各种解决方案,包括形态学操作和使用
Filter2D
,但我仍然无法解决问题。

python opencv image-processing
1个回答
0
投票

我认为通过对图像使用除法归一化您会找到更好的结果。这个概念只是将图像除以图像的模糊版本。使用大模糊。

输入:

enter image description here

import cv2
import numpy as np

# read the image as grayscale
img = cv2.imread('makro.jpg', cv2.IMREAD_GRAYSCALE)

# blur img
blur = cv2.GaussianBlur(img, (0,0), sigmaX=99, sigmaY=99)

# divide img by blur
divide = cv2.divide(img, blur, scale=255)

# save results
cv2.imwrite('makro_divide.jpg',divide)

# show results
cv2.imshow("divide", divide)
cv2.waitKey(0)

结果:

enter image description here

如有必要或需要,您可以在此处增加对比度或阈值。

© www.soinside.com 2019 - 2024. All rights reserved.