这里的问题是我需要删除行并编写代码来识别字符。到目前为止,我已经看到了解决方案,其中 char 是实心的,但它有带双边框的 char。
最佳答案
对于这个特定的验证码,有一个非常简单的解决方案。但是,由于评论中已经提到的验证码的“性质”,并且通常在处理提供的输入数据有限的图像处理任务时,无法保证这种方法适用于其他甚至非常相似的验证码。
读取灰度图像。
将图像阈值设置为接近白色的截止点。
Flood fill黑色的“背景”。
使用 -psm 6
运行 pytesseract
选项。
这就是全部代码:
import cv2
import pytesseract
# Read image as grayscale
img = cv2.imread('FuZEJ.png', cv2.IMREAD_GRAYSCALE)
# Threshold at nearly white cutoff
thr = cv2.threshold(img, 224, 255, cv2.THRESH_BINARY)[1]
# Floodfill "background" with black
ff = cv2.floodFill(thr, None, (0, 0), 0)[1]
# OCR using pytesseract
text = pytesseract.image_to_string(ff, config='--psm 6').replace('\n', '').replace('\f', '')
print(text)
# xwphs
警告:我使用来自 Mannheim University Library 的特殊版本的 Tesseract .
----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.16299-SP0
Python: 3.9.1
PyCharm: 2021.1.1
OpenCV: 4.5.1
pytesseract: 5.0.0-alpha.20201127
----------------------------------------
https://stackoverflow.com/questions/67561509/
相关文章:
python - 如何减少 PyQt5 QGridLayout 中两个小部件之间的空间?
haskell - 在 haskell 中给 `_` 一个类型签名
visual-studio-code - 代码行数旁边的竖线是什么
r - 为什么 geom_smooth 不绘图? (唯一值不足错误)
kubernetes - 如何将 kubernetes 的一个 secret 值复制到同一 name
java - 如果读取字节数为 0,是否有任何理由继续读取 InputStream?
python - 检查是否存在与列表中的字符串匹配的子字符串