【问题标题】:How can I check if the rectangle contour contains numbers inside or not? (OpenCV - Python)如何检查矩形轮廓内部是否包含数字? (OpenCV - Python)
【发布时间】:2023-03-04 12:18:01
【问题描述】:

我知道画质很差,但那是原图

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
rectKern = cv2.getStructuringElement(cv2.MORPH_RECT, (85, 64))
blackhat = cv2.morphologyEx(gray, cv2.MORPH_BLACKHAT, rectKern)

edges = cv2.Canny(light, 120, 255, 1)

squareKern = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
light = cv2.morphologyEx(gray, cv2.MORPH_OPEN, squareKern)
light = cv2.threshold(light, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]

这是结果

如何检查该蓝色矩形内是否有数字? (如果里面没有数字,那么我不会在它周围画一个边界框,因为它不是车牌)。

【问题讨论】:

    标签: python opencv ocr object-detection


    【解决方案1】:

    有多种方法可以做到这一点。根据您的要求选择。

    1- 通过 pytesseract 进行 OCR - 裁剪矩形区域,然后将其传递给 tesseract 以从图像中提取文本。

    # Import required packages 
    import cv2 
    import pytesseract 
      
    # Mention the installed location of Tesseract-OCR in your system 
    pytesseract.pytesseract.tesseract_cmd = 'System_path_to_tesseract.exe'
      
    # Read image from which text needs to be extracted 
    img = cv2.imread("sample.jpg") 
      
    # Preprocessing the image starts 
      
    # Convert the image to gray scale 
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
      
    # Performing OTSU threshold 
    ret, thresh1 = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU | cv2.THRESH_BINARY_INV) 
      
    # Specify structure shape and kernel size.  
    # Kernel size increases or decreases the area  
    # of the rectangle to be detected. 
    # A smaller value like (10, 10) will detect  
    # each word instead of a sentence. 
    rect_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (18, 18)) 
      
    # Appplying dilation on the threshold image 
    dilation = cv2.dilate(thresh1, rect_kernel, iterations = 1) 
      
    # Finding contours 
    contours, hierarchy = cv2.findContours(dilation, cv2.RETR_EXTERNAL,  
                                                     cv2.CHAIN_APPROX_NONE) 
      
    # Creating a copy of image 
    im2 = img.copy() 
      
    # A text file is created and flushed 
    file = open("recognized.txt", "w+") 
    file.write("") 
    file.close() 
      
    # Looping through the identified contours 
    # Then rectangular part is cropped and passed on 
    # to pytesseract for extracting text from it 
    # Extracted text is then written into the text file 
    for cnt in contours: 
        x, y, w, h = cv2.boundingRect(cnt) 
          
        # Drawing a rectangle on copied image 
        rect = cv2.rectangle(im2, (x, y), (x + w, y + h), (0, 255, 0), 2) 
          
        # Cropping the text block for giving input to OCR 
        cropped = im2[y:y + h, x:x + w] 
          
        # Open the file in append mode 
        file = open("recognized.txt", "a") 
          
        # Apply OCR on the cropped image 
        text = pytesseract.image_to_string(cropped) 
          
        # Appending the text into file 
        file.write(text) 
        file.write("\n") 
          
        # Close the file 
        file.close 
    

    来源:Link

    2- opencv 的 EAST 文本检测器 - Tutorial

    另外,查看question 了解更多方法

    还有this

    【讨论】:

    • 哇非常感谢你这么详细的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 2016-09-25
    • 2012-05-10
    相关资源
    最近更新 更多