我们提取目标轮廓之后,可以做很多处理,下面讲解轮廓处理之一:多边形逼近;
- [1]轮廓逼近简介:
轮廓逼近本质是减少编码点; - [2]代码展示:
for(size_t i = 0; i < contours.size(); i++)
{
Moments mm = moments(contours[i]);
double cx = mm.m10 / mm.m00;
double cy = mm.m01 / mm.m00;
circle(src, Point(cx, cy), 3, Scalar(255, 0, 0), 2, 8, 0);
double area = contourArea(contours[i]);
double len = arcLength(contours[i], true);
Mat result;
approxPolyDP(contours[i], result, 4, true);
printf("corners:%d,columns:%d", result.rows, result.cols);
//result.rows为逼近多边形的顶点;
//result.cols为逼近多边形的边;
if(result.rows == 6)
{
cout << "六边形" << endl;
}
else if(result.rows == 4)
{
cout << "四边形" << endl;
}
/*
void approxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed);
第一个参数 InputArray curve:输入的点集
第二个参数OutputArray approxCurve:输出的点集,当前点集是能最小包容指定点集的。画出来即是一个多边形。
第三个参数double epsilon:指定的精度,也即是原始曲线与近似曲线之间的最大距离。
第四个参数bool closed:若为true,则说明近似曲线是闭合的;反之,若为false,则断开。
*/
}