//边缘检测
Canny(gray, canny_output, 15, 30, 3);
//寻找轮廓
findContours(canny_output, g_Contours, Hierarchy, RETR_EXTERNAL, CHAIN_APPROX_NONE, Point(0, 0));
//计算矩
vector<Moments> mu(g_Contours.size());
for(unsigned int i = 0; i<g_Contours.size(); i++)
{
mu[i] = moments(g_Contours[i], false);
}
//计算中心矩
vector<Point2f> mc(g_Contours.size());
for (unsigned int i = 0; i<g_Contours.size(); i++)
{
mc[i] = Point2f(static_cast<float>(mu[i].m10/mu[i].m00), static_cast<float>(mu[i].m01 / mu[i].m00));
}
//绘制轮廓
Mat drawing = Mat::zeros(canny_output.size(), CV_8UC3);
Area = 0;
for (unsigned int i = 0; i < g_Contours.size(); i++)
{
drawContours(drawing, g_Contours, i, 255, 2, 8, Hierarchy, 0, Point());
//绘制圆
circle(drawing, mc[i], 4, 255, -1, 8, 0);
Area = Area + contourArea(g_Contours[i]);
}
resize(drawing, drawing, Size(drawing.cols / 2, drawing.rows / 2), (0, 0), (0, 0), 3);
imshow(window_name2, drawing);
printf("计算出的轮廓面积:m00=%0.2f\n", Area);
Canny(gray, canny_output, 15, 30, 3);
//寻找轮廓
findContours(canny_output, g_Contours, Hierarchy, RETR_EXTERNAL, CHAIN_APPROX_NONE, Point(0, 0));
//计算矩
vector<Moments> mu(g_Contours.size());
for(unsigned int i = 0; i<g_Contours.size(); i++)
{
mu[i] = moments(g_Contours[i], false);
}
//计算中心矩
vector<Point2f> mc(g_Contours.size());
for (unsigned int i = 0; i<g_Contours.size(); i++)
{
mc[i] = Point2f(static_cast<float>(mu[i].m10/mu[i].m00), static_cast<float>(mu[i].m01 / mu[i].m00));
}
//绘制轮廓
Mat drawing = Mat::zeros(canny_output.size(), CV_8UC3);
Area = 0;
for (unsigned int i = 0; i < g_Contours.size(); i++)
{
drawContours(drawing, g_Contours, i, 255, 2, 8, Hierarchy, 0, Point());
//绘制圆
circle(drawing, mc[i], 4, 255, -1, 8, 0);
Area = Area + contourArea(g_Contours[i]);
}
resize(drawing, drawing, Size(drawing.cols / 2, drawing.rows / 2), (0, 0), (0, 0), 3);
imshow(window_name2, drawing);
printf("计算出的轮廓面积:m00=%0.2f\n", Area);