可以使用drawContours绘制点吗?

时间:2012-09-17 22:44:35

标签: c++ image-processing opencv

使用函数findContours和approxPolyDP查找图像元素的轮廓。使用这些点我使用drawContours函数在新图像中绘制多边形。  我想使用drawContours函数生成的所有点,以获得数字的质心和主轴,有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

您不必将轮廓绘制到另一个图像。只需循环它们,计算它们的力矩,然后计算每个时刻的质心(质心),主轴角度。

代码(未经测试):

using namespace cv;
using namespace std;

[...]

// Get contours
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
findContours( canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );

// Get the moments
vector<Moments> mu(contours.size() );
for( int i = 0; i < contours.size(); i++ ) {
  mu[i] = moments( contours[i], false ); 
}

// Get the mass centers
vector<Point2f> mc( contours.size() );
for( int i = 0; i < contours.size(); i++ ) {
  mc[i] = Point2f( mu[i].m10/mu[i].m00 , mu[i].m01/mu[i].m00 ); 
}

// Get the angle of the main axis
vector<double> ama( contours.size() );
for( int i = 0; i < contours.size(); i++ ) {
  ama[i] = 0.5*atan2((2*mu[i].mu11),(mu[i].mu20-mu[i].mu02)); //need to be 2 arguments
}

希望有所帮助!有关详细信息,请查看以下链接: