pytesseract:opencv预处理图片

一、目的

原始图片用pytesseract识别文字,精准度往往没达到预期。使用opencv处理后,提高识别精准度。处理方法有

a.图片转成白底黑字。

b.截取图片某固定区域。这个很重要,因为图片包含图标或其他形状图形,辨识导致错乱的。

二、opencv 处理

import cv2

#加载图片
image = cv2.imread(filePath)

#截取矩形区域
# 格式[y1: y2, x1: x2] , (x1,y1)矩形左上角,(x2,y2)矩形右下角.
image = image[180:550, 55:280]

#灰度转换
GrayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
 
#二值化   
    # cv2Type: int类型
    # 0. cv2.THRESH_BINARY
    # 表示阈值的二值化操作,大于阈值使用maxval表示,小于阈值使用0表示
    # 
    # 1. cv2.THRESH_BINARY_INV
    # 表示阈值的二值化翻转操作,大于阈值的使用0表示,小于阈值的使用最大值表示
    # ret, thresh2 = cv2.threshold(GrayImage, 88, 255, cv2.THRESH_BINARY_INV)

    #cv2Threshold 阈值

ret, thresh2 = cv2.threshold(GrayImage, cv2Threshold, 255, cv2Type)

#ocr 辨识
# output_type=Output.DICT 将获取具体辨识数据,用于后期处理。
results = pytesseract.image_to_data(thresh2, output_type=Output.DICT, lang='eng')

写文字,画矩形

 for i in range(0, len(results["text"])):
        text = results["text"][i].strip()
        tmp_tl_x = results["left"][i]
        tmp_tl_y = results["top"][i]
        tmp_br_x = tmp_tl_x + results["width"][i]
        tmp_br_y = tmp_tl_y + results["height"][i]
        #写字
        cv2.putText(thresh2, text, (tmp_tl_x, tmp_tl_y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 255), 1)

        #画矩形
        cv2.rectangle(image, (tmp_tl_x, tmp_tl_y), (tmp_br_x, tmp_br_y), (0, 255, 255), 2)

参考:https://livezingy.com/pytesseract-image_to_data_locate_text/

你可能感兴趣的:(python,opencv,图像处理)