opencv找到并保存内部轮廓,知道最大的轮廓

时间:2015-07-27 10:32:05

标签: python opencv opencv-contour

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

原始图片: enter image description here

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()

1 个答案:

答案 0 :(得分:3)

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

这是cv2.findContours()mode选项之一:

  

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

所以问一个好的

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

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

稍后我会尝试更新答案以包含MCVE(但只有在您更新问题时才包含一个^^)