【问题标题】:Segmenting connected characters in an image分割图像中的连接字符
【发布时间】:2018-11-18 02:50:46
【问题描述】:

我的目标是正确分割图像中的字符

我的图片如下所示:

如何正确分割连接的 B 和 W?此外,我的代码似乎发现 750 也都已连接。我如何对它们进行细分?

我必须应用哪种转换?我试过侵蚀,但没有帮助?如何为这样的图像选择内核大小? 5 和 M 上的噪音应该如何去除?

我应该对我的代码进行哪些更改以正确分割和隔离每个字符? 代码:

img = cv2.imread('C:\\xx\\testimages\\X\\plate4.jpg', 0)
cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU,img)
image, contours, hier = cv2.findContours(img, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
contours = sorted(contours, key=lambda ctr: cv2.boundingRect(ctr)[0])
d=0
for ctr in contours:
    # Get bounding box
        x, y, w, h = cv2.boundingRect(ctr)
    # Getting ROI
        if w>20 and h>20 and w<60:       #Boundary conditions to isolate a character
            print(x, y, w, h)
            roi = image[y:y+h, x:x+w]
            #roi=cv2.resize(roi,(20,35))
            #kernel = np.ones((3,3), np.uint8)
            #roi = cv2.morphologyEx(roi, cv2.MORPH_CLOSE, kernel)
            #roi = cv2.erode(roi, kernel, iterations=1)
            # kernel_1=np.ones((1,1),np.uint8)
            # roi=cv2.dilate(roi,kernel,iterations=1)
            cv2.imshow('character: %d' % d, roi)
            cv2.imwrite('C:\\xx\\ValidationSet\\character_%d.png'%d, roi)
            cv2.waitKey(0)
            cv2.destroyAllWindows()
            d+=1

【问题讨论】:

  • 在轮廓之前(而不是之后)侵蚀图像应该会有所帮助。
  • @jedwards 为腐蚀选择内核大小的依据是什么?
  • 这在很大程度上取决于图像的分辨率和其中字符的大小(按像素计算)。您可以手动尝试并尝试找出合理的内核大小,或者可能检测相对于其他检测到的轮廓“太宽”的轮廓并在这种情况下自适应侵蚀。不幸的是,在这种情况下没有万能的答案。
  • @jedwards 我在塑造轮廓之前腐蚀了图像。它帮助我将“7”与 50 区分开来,但不适用于 BW 和 50。增加内核大小只会使其他字符分割恶化,因为它们变得无法识别。我该怎么办?
  • 您可以尝试使用更小的内核进行更多迭代,而不是使用更大的内核。但我同意,不要“太大”。

标签: python opencv image-processing ocr image-segmentation


【解决方案1】:

正如人们已经在 cmets 中推荐的那样,最好的选择是使用形态变换,例如腐蚀和开放。 关于内核大小,您可以使其成为轮廓宽度的函数,或者只是迭代多次应用大小为 (3, 3) 或 (5,5) 的小内核。我个人发现这个tutorial(在 C++ 中,但概念相同)简单而有用。 关于从“5”和“M”中去除噪声,你不能以一种通用的方式来做到这一点,它可以推广到所有可能的噪声类型。如果您有更多关于错误统计的信息或更多信息(例如,“噪音”总是以当前字符顶部的白色像素的形式出现),那么它当然更容易且可行。

【讨论】:

    猜你喜欢
    • 2019-08-26
    • 2012-12-22
    • 2011-08-29
    • 2013-12-10
    • 1970-01-01
    • 2014-12-03
    • 2017-11-25
    • 2014-07-31
    • 2018-10-23
    相关资源
    最近更新 更多