如何使用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()
答案 0 :(得分:3)
如果礼貌地询问,OpenCV的findContours
方法可以为您提供内部轮廓。
这是cv2.findContours()
的mode
选项之一:
CV_RETR_CCOMP
检索所有轮廓并将它们组织成一个 两级层次结构。在顶层,有外部边界 的组件。在第二级,有界限 孔。如果连接的孔内有另一个轮廓 组件,它仍然处于顶层。
所以问一个好的
myContours = cv2.findContours(myImg,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE)
应该给你一种嵌套的对象数组,第一项给出无用的轮廓,其余的给出内部。
稍后我会尝试更新答案以包含MCVE(但只有在您更新问题时才包含一个^^)