2 回答
TA贡献1772条经验 获得超8个赞
要提取的轮廓应为白色,背景为黑色。我对您的代码进行了一些修改,消除了未添加任何值的行。
import cv2
img = cv2.imread('image_to_be_read',0)
backup = img.copy() #taking backup of the input image
backup = 255-backup #colour inversion
我使用RETR_TREE作为轮廓检索模式,该模式检索所有轮廓并创建完整的族层次列表。请在这里找到相同的文档
_, contours, _ = cv2.findContours(backup, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
在opencv4中,finContours方法已更改。请用:
contours, _ = cv2.findContours(backup, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
然后遍历轮廓并在轮廓周围绘制矩形
for i, contour in enumerate(contours):
x, y, w, h = cv2.boundingRect(contour)
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 1)
保存图像
cv2.imwrite('output3.png', img)
我得到的结果看起来像这样-
TA贡献2003条经验 获得超2个赞
您使用了标志RETR_EXTERNAL,这意味着它仅在寻找对象的最外轮廓,而不在寻找孔。在您的情况下,发现白色物体覆盖了整个图像,几乎没有孔(字母/数字)。您有两种选择:
用“ bitwise_not”反转图像中的颜色
使用RETR_LIST标志收集所有轮廓。请注意,它还会在手指内收集孔。
添加回答
举报