1

如何使用 python opencv 绘制/保存图像的内部轮廓?我知道如何获得最大的轮廓,我想保存它和内孔,它们也是轮廓。

原图: 在此处输入图像描述

import numpy as np
import cv2
from matplotlib import pyplot as plt

rgb = cv2.imread('MIL_NPGERBV2.png')
grayImg = cv2.imread('MIL_NPGERBV2.png', cv2.CV_LOAD_IMAGE_GRAYSCALE)
#to apply properly contour algorithm we need convert to binary
(thresh, bwImage) = cv2.threshold(image, 128, 255, cv2.THRESH_BINARY_INV |     cv2.THRESH_OTSU)

 img1 = rgb.copy()
 img2 = rgb.copy()
 contours, hierarchy = cv2.findContours(bwImage,cv2.RETR_TREE,
                                       cv2.CHAIN_APPROX_SIMPLE)

 #show all contours
 cv2.drawContours(img1, contours, -1, (0,255,0), 2)
 out = np.hstack([img1])
 cv2.imshow('Output', out)
 cv2.waitKey(0)
 cv2.destroyAllWindows()
4

1 回答 1

5

findContours如果礼貌地询问,OpenCV 的方法可以为您提供内部轮廓。

它是以下mode选项之一cv2.findContours()

CV_RETR_CCOMP检索所有轮廓并将它们组织成两级层次结构。在顶层,有组件的外部边界。在第二层,有孔的边界。如果连接组件的孔内有另一个轮廓,它仍然放在顶层。

所以问一个不错的

myContours = cv2.findContours(myImg,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE)

应该给你一种嵌套对象数组,第一项给出无用的轮廓,其余的给出内部。

我稍后会尝试更新答案以包含 MCVE(但前提是您更新问题以包含一个 ^^)

于 2015-07-27T14:33:16.717 回答