findContours
によって返される階層は、次の形式を有する。 hierarchy[idx][{0,1,2,3}]={next contour (same level), previous contour (same level), child contour, parent contour}
CV_RETR_CCOMP
、外側輪郭と正孔の階層を返します。 これは、hierarchy[idx]
の要素2と要素3が-1以下でない、つまり各要素が親または子を持たないか、または親であるが子はないか、または子であるが親はないことを意味します。
親を持つが子供を持たない要素は、穴の境界になります。
つまり、基本的にhierarchy[idx]
を通過し、hierarchy[idx][3]>-1
で何かを描画します。以下のような
何か(。Pythonで動作しますが、C++をテストしていないアイデアはいえ結構です。):CV_RETR_CCOMPを使用した場合
findContours(image, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);
if (!contours.empty() && !hierarchy.empty()) {
// loop through the contours/hierarchy
for (int i=0; i<contours.size(); i++) {
// look for hierarchy[i][3]!=-1, ie hole boundaries
if (hierarchy[i][3] != -1) {
// random colour
Scalar colour((rand()&255), (rand()&255), (rand()&255));
drawContours(outImage, contours, i, colour);
}
}
}
C++バージョンとCバージョンの間の移行は簡単です。 FYI。 –