代码之家  ›  专栏  ›  技术社区  ›  hypadr1v3

cv2.MORPH_将字母紧密连接在一起

  •  -1
  • hypadr1v3  · 技术社区  · 8 年前


    input 但它把一些字母连接在一起,当我检测到它的轮廓时就会产生问题。例如:

    joined letters

    是否有一些调整,我可以做我的代码来解决这个问题,或者我将不得不做一个不同的方式?(但它必须是一个关闭算法或函数,因为它在预处理中非常有用)。

    我使用的代码如下:

    kernel = np.ones((5,5),np.uint8)
    opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel)
    closing = cv2.morphologyEx(opening, cv2.MORPH_CLOSE, kernel)
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   John_Sharp1318    8 年前

    以下是可行的解决方案:

      import numpy as np
      import cv2
      from matplotlib import pyplot as plt
    
      I = cv2.imread('/home/smile/Downloads/words.jpg',cv2.IMREAD_GRAYSCALE)
    
      _,It = cv2.threshold(I,0.,255,cv2.THRESH_OTSU)
      It = cv2.bitwise_not(It)
      _,labels = cv2.connectedComponents(I)
    
      result = np.zeros((I.shape[0],I.shape[1],3),np.uint8)
    
      for i in range(labels.min(),labels.max()+1):
         mask = cv2.compare(labels,i,cv2.CMP_EQ)
    
         _,ctrs,_ = cv2.findContours(mask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
    
         result = cv2.drawContours(result,ctrs,-1,(0xFF,0,0))
    
      plt.figure()
      plt.imshow(result)    
      plt.axis('off')
    

    在前两个步骤中,图像是二值化和反转的,以使字母显示为白底黑底。

    _,It = cv2.threshold(I,0.,255,cv2.THRESH_OTSU)
    It = cv2.bitwise_not(It)
    

    bin

    _,labels = cv2.connectedComponents(I)
    

    labels

    最后一步是为每个标签值找到图像中与其对应的区域,处理该区域的外部轮廓,并在输出图像中“绘制”。

    result = np.zeros((I.shape[0],I.shape[1],3),np.uint8)
    
    for i in range(labels.min(),labels.max()+1):
       mask = cv2.compare(labels,i,cv2.CMP_EQ)
    
       _,ctrs,_ = cv2.findContours(mask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
    
       result = cv2.drawContours(result,ctrs,-1,(0xFF,0,0)
    

    希望有帮助。

    推荐文章