此前在《【OpenCV3】图像轮廓查找与绘制——cv::findContours()与cv::drawContours()详解》一文中,详细介绍了图像轮廓的检测与绘制,但是在实际的应用中,往往需要检测目标的最大轮廓,但是OpenCV本身并没有封装这样一个函数,下面就贴上封装好的接口,供参考使用。
说明:对于最大轮廓的定义,有些以轮廓的点数最多为标准,有的以所包围的面积最大为标准,这里将两种都实现一下。
1、C接口的封装(最多点数)
CvSeq* cvFindBiggestCountour(IplImage *binaryImage)
{
int polyHull0 = 1;
CvPoint offset;
offset.x = 0;
offset.y = 0;
CvMemStorage *tempStorage = cvCreateMemStorage(0);
CvSeq *contour;
CvSeq *c;
int nContours = 0;
double largest_length = 0;
double len = 0;
CvContourScanner scanner;
CvSlice slice = CV_WHOLE_SEQ;
scanner = cvStartFindContours(binaryImage, tempStorage, sizeof(CvContour), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, offset);
while ((c = cvFindNextCo