cv::findContours 函数能检测二值图像中的所有闭合轮廓,包括区域内部空穴构成的轮廓。实现方法是在调用函数时指定另一个标志:
cv::findContours(image,
contours, // 存放轮廓的向量
cv::RETR_LIST, // 检索全部轮廓
cv::CHAIN_APPROX_NONE); // 全部像素
调用后得到如下轮廓。
也可以把这些轮廓分层次组织起来。主区域是父轮廓,它内部的空穴是子轮廓;如果空穴内部还有区域,那它们就是上述子轮廓的子轮廓,以此类推。使用 cv::RETR_TREE 标志可得到这个层次结构,代码为:
std::vector<cv::Vec4i> hierarchy;
cv::findContours(image, contours,