OpenCV 2重心
c++
image-processing
opencv
6
0

我试图找到轮廓的质心,但是在C ++(OpenCV 2.3.1)中实现示例代码时遇到麻烦。谁能帮我吗?

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

如果具有轮廓区域的蒙版,则可以找到质心位置,如下所示:

cv::Point computeCentroid(const cv::Mat &mask) {
    cv::Moments m = moments(mask, true);
    cv::Point center(m.m10/m.m00, m.m01/m.m00);
    return center;
}

当有遮罩但没有轮廓时,此方法很有用。在那种情况下,与使用cv::findContours(...)然后找到质心相比,上述方法在计算上更有效。

这是来源

收藏
评论

要找到轮廓的质心,可以使用矩量法。并且功能都是通过OpenCV实现的。

检查这些矩函数( 中心矩和空间矩 )。

下面的代码取自OpenCV 2.3文档教程。 完整代码在这里。


/// Find contours
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 ); } 

请检查此SOF ,尽管它在Python中,但很有用。它找到轮廓的所有参数。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号