python - Python Cv2 Tesseract 提高粗数字的可读性?
问题描述
我的图像对屏幕上的数字大约有 50% 的正确性。
数字看起来像这样。
我的代码给了我这个结果 [164609, 7097394, 2259]
我怎样才能改进我的代码,让它读起来更准确?我尝试上下改变白色色调,结果好坏参半。我已经尝试更改我的 PSM 和 OEM 设置。
with mss.mss() as sct:
region = {
'left': 3577,
'top': 146,
'width': 171,
'height': 130
}
image = sct.grab(region)
mss.tools.to_png(image.rgb, image.size, output='loot1.png')
rawImage = cv2.imread('test3.png')
hsv = cv2.cvtColor(rawImage, cv2.COLOR_BGR2HSV)
lower_white = np.array([0,0,230])
higher_white = np.array([255,255,255])
white_range = cv2.inRange(hsv, lower_white, higher_white)
data = pytesseract.image_to_string(white_range, lang='eng',config='--psm 6 --oem 3 -c tessedit_char_whitelist=0123456789')
numbers = [
int(m)
for line in data.splitlines()
if (m := "".join(ch for ch in line if ch.isdigit())).isnumeric()
]
cv2.imshow("White", white_range)
cv2.waitKey()
print(numbers)
编辑:设法获得带有黑色文本的白色图像。我增强了图像并设法使其模糊。
到目前为止我的代码。
with mss.mss() as sct:
region = {
'left': 3577,
'top': 146,
'width': 171,
'height': 130
}
image = sct.grab(region)
mss.tools.to_png(image.rgb, image.size, output='loot1.png')
rawImage = cv2.imread('test4.png')
# Make Image bigger
scale_percent = 260 # percent of original size
width = int(rawImage.shape[1] * scale_percent / 100)
height = int(rawImage.shape[0] * scale_percent / 100)
dim = (width, height)
resized = cv2.resize(rawImage, dim, interpolation = cv2.INTER_AREA)
#Thin the numbers
kernel = np.ones((2, 2), np.uint8)
rawImage = cv2.erode(resized, kernel)
#Find the white and remove everything else
hsv = cv2.cvtColor(resized, cv2.COLOR_BGR2HSV)
lower_white = np.array([0,0,235])
higher_white = np.array([255,255,255])
white_range = cv2.inRange(hsv, lower_white, higher_white)
white_range = cv2.bitwise_not(white_range)
#Blur image
ksize = (9,9)
white_range = cv2.blur(white_range,ksize)
#Sharpen image
# sharp = np.array([[-1,-1,-1],
# [-1,9,-1],
# [-1,-1,-1]])
# sharp2 = cv2.filter2D(white_range, -1, sharp)
data = pytesseract.image_to_string(white_range, lang='eng',config='--psm 6 --oem 3 -c tessedit_char_whitelist=0123456789')
numbers = [
int(m)
for line in data.splitlines()
if (m := "".join(ch for ch in line if ch.isdigit())).isnumeric()
]
cv2.imshow("White", white_range)
cv2.waitKey()
print(numbers)
然而锐化并没有奏效。如果我使用这段代码来尝试锐化它,它就会被破解。
sharp = np.array([[-1,-1,-1],
[-1,9,-1],
[-1,-1,-1]])
sharp2 = cv2.filter2D(white_range, -1, sharp)
像这样
使用阵列进行锐化通常会使图片完全变黑。就像将 9 更改为 4 = 黑屏一样。关于我如何从这里开始的任何帮助?
解决方案
推荐阅读
- javascript - 不能在模块外使用 import 语句(Vue js)
- php - PHP ldap_bind() 失败
- java - DFS:打印所有完整路径
- nlp - 你如何搜索内容,而不是文字?
- wordpress - 如何解决polylang插件阿拉伯语问题
- javascript - chrome.identity 在 chrome 以外的浏览器中
- angular - 使用 AAD 使用 MSAL.js 生成的令牌和 Connect-MicrosoftTeams -AadAccessToken cmdlet
- javascript - axios req failed 错误:在 XMLHttpRequest.handleLoad 的结算 (settle.js:17) 处的 createError (createError.js:16) 请求失败,状态码为 404
- python - 列表索引从字符串转换为索引python
- python-3.x - AttributeError: 'list' 对象没有属性 'size' Hugging-Face 转换器