最近了解了一下pytesseract的文字识别,学习中遇到一个方法不是很清楚,网上也没有专门解释该方法的帖子,做个记录
素材![请添加图片描述](https://img-blog.csdnimg.cn/a9a4891eb6b24c8dab824abf2c1ec0ef.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5a2U5piOMeWPtw==,size_20,color_FFFFFF,t_70,g_se,x_16)
使用的时候可以去除一下水印
代码
import cv2 as cv
import pytesseract
pytesseract.pytesseract.tesseract_cmd = r'D:\Python\Tesseract-OCR\tesseract.exe'
img = cv.imread('4.png')
img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
hImg, wImg, _ = img.shape
boxes = pytesseract.image_to_boxes(img)
for b in boxes.splitlines():
b = b.split(' ')
print(b)
x, y, w, h = int(b[1]), int(b[2]), int(b[3]), int(b[4])
cv.rectangle(img, (x, hImg-y), (w, hImg-h), (0, 0, 255), 2)
cv.imshow("img", img)
cv.waitKey(0)
结果
结果大致如下所示
以 ‘M’ 的结果为例
这里看起来非常的奇怪,这4个值可以认为是两个坐标(145, 449)(274, 567);但是坐标系要以左下角为原点,跟我们数学里的坐标系原点一样,然而OpenCV里hImg, wImg, _ = img.shape
和cv.rectangle()
的宽度和高度,坐标系又是以左上角为原点;很令人费解
结论:
image_to_boxes:图像转为盒子;结果如下
M,145,449,274,567,0
从左到右依次为:字符;左下角的横坐标;左下角的纵坐标;右上角的横坐标;右上角的纵坐标;