我正在尝试使用tesseract进行OCR,为了获得更好的结果,我想在发送到tesseract之前去除背景噪音。在
我已经知道文本的颜色是固定的,并使用cv2.inrange来去除噪声背景,但问题是背景噪声的颜色与文本颜色相似,所以我就陷入了这种情况。在
以下是处理原始测试的“我的图像”:
{1美元^
我尝试了:使用cv2.inRange过滤内部文本颜色(颜色代码:#d7d4cf,喜欢白色而不是白色,有点灰色),但是有很多背景噪音。结果图像使用白色
使用cv2.inRange通过过滤类似黑色的颜色(#171510),它看起来更好,但仍然没有我想要的好,结果图像:使用黑色
我也试着用按位的方法,把白和黑合并在一起,但是得到了相似的结果,都不好。
有人能帮我或向我推荐什么,谢谢。在from PIL import Image
from pytesseract import *
import cv2
import numpy as np
def img_hsv_mask_white(img):
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# for hsv, OpenCV uses H: 0-179, S: 0-255, V: 0-255
lower_hsv = np.array([0,0,185])
upper_hsv = np.array([179,17,235])
mask = cv2.inRange(hsv, lower_hsv, upper_hsv)
blur = cv2.blur(mask,(3,3))
img2 = cv2.bitwise_and(img, img, mask = blur)
#cv2.imshow("mask", mask)
#cv2.waitKey (0)
return img2
def img_hsv_mask_black(img):
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# for hsv, OpenCV uses H: 0-179, S: 0-255, V: 0-255
lower_hsv = np.array([0,0,0])
upper_hsv = np.array([60,80,70])
mask = cv2.inRange(hsv, lower_hsv, upper_hsv)
blur = cv2.blur(mask,(8,8))
#return blur
img2 = cv2.bitwise_and(img, img, mask = blur)
#cv2.imshow("mask", mask)
#cv2.waitKey (0)
return img2
def immerge(img1, img2):
img = cv2.bitwise_and(img1,img2)
return img
#require module: numpy, opencv-python, Pillow, pytesseract
if __name__ == "__main__":
pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract'
#print(pytesseract.get_tesseract_version())
for x in range(1,9):
file = str.format("0711/{0}.png",x)
srcimg = cv2.imread(file,cv2.IMREAD_UNCHANGED)
white = img_hsv_mask_white(srcimg)
black = img_hsv_mask_black(srcimg)
merged = immerge(white, black)
#cv2.imwrite("result.png",mask)
code = pytesseract.image_to_string(merged, lang ='eng')
print(code)
cv2.imshow(file, merged)
cv2.waitKey(0)
#break