从柱状图提取数据:柱状图名称与数值匹配难题求助
解决pytesseract提取柱状图名称漏读/误读的方案
图像预处理优化
- 灰度化:将彩色图像转为灰度图,减少色彩干扰,执行代码:
cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) - 二值化:通过阈值处理分离文字与背景,可尝试自适应二值化:
cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2) - 去噪:使用中值模糊或高斯模糊消除噪点:
cv2.medianBlur(gray, 3) - 倾斜校正:若文字存在倾斜,通过霍夫直线检测或轮廓外接矩形校正角度,确保文字水平/垂直
精准定位名称区域
- 结合已有的霍夫变换柱状图定位结果,推导名称所在区域(如纵向柱状图名称在柱子下方,横向图在柱子左侧)
- 用轮廓检测提取文字区域:
cv2.findContours(),裁剪出仅包含名称的区域后再传入pytesseract,避免无关元素干扰 - 对分散的单个名称,分割为独立小区域分别识别,降低跨区域识别误差
pytesseract参数调优
- 指定识别语言:中文名称添加
lang='chi_sim',英文名称用lang='eng',避免混合识别错误 - 字符白名单:限制识别字符范围,如仅识别中文和数字:
pytesseract.image_to_string(cropped_img, lang='chi_sim', config='--psm 6 --oem 3 -c tessedit_char_whitelist="0123456789甲乙丙丁..."') - 页面分割模式(PSM):根据排版选择,单行名称用
--psm 7(单一行文本),块级名称用--psm 6(假设为单一均匀文本块)
后处理修正
- 模糊匹配:若已知名称候选列表,用
difflib.SequenceMatcher计算相似度,将识别结果匹配到最接近的候选名称 - 多识别校验:对同一区域多次识别取众数,减少单次识别的随机误差
- 规则过滤:根据名称的固定格式(如长度、前缀)过滤无效识别结果,触发重识别
内容的提问来源于stack exchange,提问作者Turin
相关产品推荐
相关产品推荐

