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

mar*_*rco 1 python opencv opencv-contour

如何使用 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()
Run Code Online (Sandbox Code Playgroud)

Jib*_*iby 5

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

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

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

所以问一个不错的

myContours = cv2.findContours(myImg,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE)
Run Code Online (Sandbox Code Playgroud)

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

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