1. 入门
OpenCV 中提供了一个功能强大的在二值图像中查找轮廓的函数cv::findContours(),通过这个函数的输出的轮廓,在结合辅助的函数arcLength(),boundingRect(),contourArea(),minAreaRect(),minEnclosingCircle()等可以完成绝大多数的二值图像分析工作。下面对这个函数使用做简要介绍:
1) 轮廓查找函数有两种接口:
一种是相对简单的接口:
std::vector<std::vector<cv::Point>> contours;
cv::findContours(image, contours, CV_RETR_EXTERNAL,CV_CHAIN_APPOX_NONE);
一种是包含了图像轮廓拓扑结构的接口:
std::vector<std::vector<cv::Point>> contours;
std::vector<cv::Vec4i> hierarchy;
cv::findContours(image, contours, hierarchy, CV_RETR_TREE,CV_CHAIN_APPOX_NONE);
2) 辅助函数功能:
arcLength() 计算轮廓长度
boundingRect() 计算最小矩形
contourArea() 计算轮廓面积
minAreaRect() 计算最小包围盒
minEnclosingCircle() 计算最小圆
convexHull() 计算凸包
fitEllipse() 拟合椭圆
2. 进阶
但以笔者的经验看来,这个函数的接口定义可能有些缺憾的是没有输出