问题描述
我正在尝试用Python编写一个程序,该程序可以读取Picross / Nonogram板。
A 20x20 one in the format I'm working on looks like this
我在读取图像时遇到了麻烦,正在使用PyTesseract,它可以识别一些数字为不正确的字符,例如,将五分之五(“ 5”)作为美元符号(“ $”)。我曾尝试只将0到9的数字列入白名单,但这样做仍然是将其读为常规字符,而忽略它。
是否有任何方法可以迫使Tesseract将其检测到的每个字符转换为数字?因此,如果它显示为“ $”,则迫使该美元符号进入具有最大相似度的数字。否则,我可以对图像预处理进行一些调整以使结果更好吗?
import numpy as np
import cv2
import PyTesseract as tess
from PyTesseract import Output
tess.PyTesseract.tesseract_cmd = 'C:/Program Files/Tesseract-OCR/tesseract'
class Image:
def __init__(self,file):
self.image = cv2.imread(file,cv2.IMREAD_GRAYSCALE)
self.imgLeft = self.image[416:901,10:104]
self.imgLeft = cv2.resize(self.imgLeft,(280,1200))
def leftLimits(self):
limits = []
for i in range(20):
# pre-processing
column = self.imgLeft[1200//20*i:1200//20*(i+1),:]
column = cv2.GaussianBlur(column,(9,9),0)
_,column = cv2.threshold(column,180,255,cv2.THRESH_BINARY)
rowLimits = []
# put each character in a Box and check if it's part of a one-digit number or a two-digit number
numbers = tess.image_to_Boxes(column,output_type=Output.DICT,config = '--psm 6')
# up here I tried to add '-c tessedit_char_whitelist=0123456789' but it just erased the char
for j in range(len(numbers['bottom'])):
value = numbers['char'][j]
if j == 0:
rowLimits.append(value)
else:
if numbers['left'][j] - numbers['right'][j-1] < 12:
rowLimits[-1] = rowLimits[-1] + value
else:
rowLimits.append(value)
limits.append([limit for limit in rowLimits])
return limits
i = Image("filename")
print(i.leftLimits())
谢谢:)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)