opencv 在给定图像中查找白色矩形区域以提高OCR结果

7eumitmz  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(154)

基本上,我试图检测盒子上的标签,这些标签是白色的。每个标签都有自己的序列号和字母。我使用EasyOCR检测数字和字母,但有时EasyOCR不能准确检测文本,但如果我从近距离拍摄图像,它检测得很好。所以,我需要使用图像处理方法裁剪标签区域。之后我会把它交给EasyOCR以获得更好的结果。我愿意接受任何想法!
我的示例图像:

pvabu6sv

pvabu6sv1#

我已经解决了这个问题,裁剪图像的基础上的图像尺寸相对于机架列和机架行.代码是,

import easyocr
import cv2

image = cv2.imread('2.jpg')
h, w, _ = image.shape
rack_rows = 3
rack_cols = 3
total_boxes = []
reader = easyocr.Reader(['en'])
for row in range(rack_rows):
    for col in range(rack_cols):
        # crop individual boxes based on dimension of image
        cropped_image = image[row*(int(h/3)) : ((row+1) * int(h/3)),(col*(int(w/3))) : ((col+1)* int(w/3)),:]
        # resize image based on custom size
        resize_image = cv2.resize(cropped_image,(800,800))
        # write cropped image to feed easyocr
        cv2.imwrite(f'image{row}_{col}.png',resize_image)
        # easyocr execution
        result = reader.readtext(f'image{row}_{col}.png')
        texts = [detection[1] for detection in result if detection[2] > 0.4]
        if len(texts[1])!=4:
            texts.pop(1)
        total_boxes.append(texts)

print(total_boxes)

在这里,我根据自定义尺寸(800,800)调整了图像的大小,以便在尺寸裁剪后提供给easyocr。我没有使用任何图像预处理技术,而不是在这里调整大小。我得到的输出是,

[['S', '5607'], ['N', '4457'], ['U', '4017'], ['P', '4529'], ['X', '3311'], ['J', '2075'], ['W', '8075'], ['M', '9623'], ['K', '5412']]

快乐编码:)

相关问题