OpenCV:从外部轮廓中去除轮廓
OpenCV: removing contours from external contours
我按照一些代码做了简单的文本识别(来自)。然而,它一直在我的字母中添加额外的轮廓,就像 e 中的循环一样。使用的代码是:
我试图解决这个问题是为了测试上一次迭代的重叠轮廓。但是在标记每个轮廓之后,我注意到它们是从最低 y 点到最高点创建的,如 [output][1]
中所示
去除内轮廓最简单的方法是什么?我已经看到许多线程引用 RETR_EXTERNAL(已经使用)调用和层次结构,但我看不到它们如何适用于此代码。
你检查过你的轮廓是什么样子的吗?多个矩形的原因是因为你的字母或精巧的边缘或轮廓变得不连贯,因此,cnts
中每个字母有多个组件。我建议如下:
打印精巧的边缘并检查它们是否按字母连接。
cv2.imshow("canny", canny)
根据您在上面看到的内容,您可以更改模糊内核大小以连接断开的字母组件,
blurred = cv2.GaussianBlur(gray, (9, 9), 0)
或使用您的边缘检测参数(更低的最小值或更大的光圈)。
canny = cv2.Canny(blurred, 80, 255, 3)
您还可以应用一些形态学操作来连接断开的字母组件,即膨胀或闭合。
kernel = np.ones((5,5),np.uint8)
closing = cv2.morphologyEx(canny, cv2.MORPH_CLOSE, kernel)
我按照一些代码做了简单的文本识别(来自
我试图解决这个问题是为了测试上一次迭代的重叠轮廓。但是在标记每个轮廓之后,我注意到它们是从最低 y 点到最高点创建的,如 [output][1]
中所示去除内轮廓最简单的方法是什么?我已经看到许多线程引用 RETR_EXTERNAL(已经使用)调用和层次结构,但我看不到它们如何适用于此代码。
你检查过你的轮廓是什么样子的吗?多个矩形的原因是因为你的字母或精巧的边缘或轮廓变得不连贯,因此,cnts
中每个字母有多个组件。我建议如下:
打印精巧的边缘并检查它们是否按字母连接。
cv2.imshow("canny", canny)
根据您在上面看到的内容,您可以更改模糊内核大小以连接断开的字母组件,
blurred = cv2.GaussianBlur(gray, (9, 9), 0)
或使用您的边缘检测参数(更低的最小值或更大的光圈)。
canny = cv2.Canny(blurred, 80, 255, 3)
您还可以应用一些形态学操作来连接断开的字母组件,即膨胀或闭合。
kernel = np.ones((5,5),np.uint8) closing = cv2.morphologyEx(canny, cv2.MORPH_CLOSE, kernel)