Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用PyteSeract OCR从表格图像中识别特定数字_Python_Opencv_Ocr_Image Recognition_Python Tesseract - Fatal编程技术网

Python 使用PyteSeract OCR从表格图像中识别特定数字

Python 使用PyteSeract OCR从表格图像中识别特定数字,python,opencv,ocr,image-recognition,python-tesseract,Python,Opencv,Ocr,Image Recognition,Python Tesseract,我想从附加图像(png文件)中读取一列数字 我的代码是 import cv2 import pytesseract import os img = cv2.imread(os.path.join(image_path, image_name), 0) config= "-c tessedit_char_whitelist=01234567890.:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" pytessera

我想从附加图像(png文件)中读取一列数字

我的代码是

import cv2
import pytesseract
import os

img = cv2.imread(os.path.join(image_path, image_name), 0)
config= "-c 
        tessedit_char_whitelist=01234567890.:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

pytesseract.image_to_string(img, config=config)
此代码为我提供了输出字符串:“n113\nun\n1.08”。我们可以看到,有两个问题:

  • 它无法识别1.13中的小数点(见附图)
  • 完全无法阅读1.11(见附图)。它只返回“nun”
  • 这些问题的解决方案是什么


    您需要对图像进行预处理。一种简单的方法是调整图像大小,转换为灰度,并使用大津阈值获得二值图像。从这里,我们可以应用轻微的高斯模糊,然后反转图像,以便所需的文本提取是白色的背景是黑色的。这是经过处理的图像,可以进行OCR

    光学字符识别结果

    1.13
    1.11
    1.08
    
    代码


    只是想知道(1)为什么必须调整am图像的大小,使其宽度=400?(2) 为什么在GaussianBlur中将ksize参数设置为(5,5)?图像放大是为了帮助OCR处理,您放大图像的量是任意的。高斯模糊核被设置为
    (5,5)
    ,以帮助平滑图像并在阈值化之前去除小点。这只是一个典型的内核大小。其他可以工作的尺寸是
    (3,3)
    (7,7)
    ,具体取决于图像和存在的噪声量
    import cv2
    import pytesseract
    import imutils
    
    pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
    
    # Resize, grayscale, Otsu's threshold
    image = cv2.imread('1.png')
    image = imutils.resize(image, width=400)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
    
    # Blur and perform text extraction
    thresh = 255 - cv2.GaussianBlur(thresh, (5,5), 0)
    data = pytesseract.image_to_string(thresh, lang='eng',config='--psm 6')
    print(data)
    
    cv2.imshow('thresh', thresh)
    cv2.waitKey()