OpenCV:从外部轮廓中删除轮廓

问题描述 投票:0回答:1

我遵循一些代码来进行简单的文本识别(来自How to detect separate figures in an image?)。但是,它不断在我的字母内添加附加轮廓,例如e中的循环。使用的代码是:

我试图解决此问题的方法是测试先前迭代中的重叠轮廓。但是在标记每个轮廓后,我注意到它们是从最低y点到最高y点创建的,如[output] [1]

所示

去除内轮廓的最简单方法是什么?我已经看到许多线程引用了RETR_EXTERNAL(已使用)调用和层次结构,但是我看不到它们如何适用于此代码。

python opencv opencv-contour
1个回答
1
投票

您是否检查过轮廓?使用多个矩形的原因是因为您的字母或Canny边缘或轮廓断开了连接,因此cnts中每个字母有多个分量。我建议以下内容:

  1. 打印打印边缘,并检查每个字母是否已连接。

    cv2.imshow("canny", canny)

  2. 根据上面的显示,您可以更改模糊内核的大小以连接断开连接的字母组件,

    blurred = cv2.GaussianBlur(gray, (9, 9), 0)

  3. 或使用边缘检测参数(较小的最小值或较大的光圈)。

    canny = cv2.Canny(blurred, 80, 255, 3)

  4. 您还可以应用一些形态学操作来连接断开的字母组件,即膨胀或闭合。

    kernel = np.ones((5,5),np.uint8) closing = cv2.morphologyEx(canny, cv2.MORPH_CLOSE, kernel)

© www.soinside.com 2019 - 2024. All rights reserved.