图像通常包含各种物体,图像分析的目的之一就是识别和提取这些物体。在物体检测和识别程序中,第一步通常就是生成二值图像,找到感兴趣物体所处的位置。不管用什么方式获得二值图像,下一个步骤都是从由 1 和0 组成的像素集合中提取出物体。
执行一次简单的阈值化操作,然后应用形态学滤波器,就能获得这幅图像。具体来说,就是提取连续区域,即二值图像中由一批连通的像素构成的形状。
OpenCV 提供了一个简单的函数,可以提取出图像中连续区域的轮廓,这个函数就是 cv::findContours:
// 用于存储轮廓的向量
std::vector<std::vector<cv::Point>> contours;
cv::findContours(image,
contours, // 存储轮廓的