代码之家  ›  专栏  ›  技术社区  ›  Ahmed Hegazy

大黑字的自适应阈值处理

  •  0
  • Ahmed Hegazy  · 技术社区  · 5 年前

    cvtColor(mbgra, dst, CV_BGR2GRAY);
    GaussianBlur(dst, dst, Size(11, 11), 0);
    adaptiveThreshold(dst, dst, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 11, 3);
    

    算法运行得很好,但是我有一个小问题,关于大的黑色字母,因为它从内部变得像这样空洞 enter image description here

    enter image description here

    问题是,如何使这些字母填写与原始图像一样的黑色,而不增加块大小的过滤器,因为这将不会发挥良好的小字母!

    任何想法或建议当然欢迎!

    1 回复  |  直到 5 年前
        1
  •  0
  •   T.Lucas    5 年前

    以下代码:

    import numpy as np
    import cv2
    import matplotlib.pyplot as plt
    
    image = cv2.imread("FYROJ.png")
    gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
    thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 3)
    
    im_contours, contours, hier = cv2.findContours(thresh, mode=cv2.RETR_TREE, method=cv2.CHAIN_APPROX_NONE)
    hier = hier[0]
    kept_contours = [contour for idx, contour in enumerate(contours) if hier[idx][2] >= 0]
    
    drawing = np.zeros_like(gray)
    cv2.drawContours(drawing, kept_contours, -1, color=255)
    
    ret, markers = cv2.connectedComponents(drawing)
    
    watershed_res = cv2.watershed(image, np.int32(markers))
    
    plt.imshow(watershed_res)
    plt.show()
    

    将生成此图像: enter image description here

    也许试着从这里开始,选择原始图像中有很多黑色像素的区域。。。

    推荐文章