2

我刚开始使用opencv,我正在尝试制作一个程序,将正方形放在一些沙子上的岩石图片周围。此处的函数文档包括如何使用它的示例。

findContours( src, contours, hierarchy,
  CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE );

findContours 的原型是

void findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset=Point()) ;

我有两个问题。
1. 示例中的第三个参数hierarchy是 avector<Vec4i>与 findContours 期望的类型不匹配。这是为什么?
2.如何使用存储的数据contours来找到轮廓的位置来创建边界框?

4

1 回答 1

4
std::vector<std::vector<cv::Point> > contours;
std::vector<cv::Vec4i> hierarchy;
cv::findContours( mask, contours, hierarchy, cv::RETR_CCOMP, cv::CHAIN_APPROX_TC89_KCOS);
for ( size_t i=0; i<contours.size(); ++i )
{
    cv::drawContours( img, contours, i, Scalar(200,0,0), 1, 8, hierarchy, 0, Point() ); 
    cv::Rect brect = cv::boundingRect(contours[i]);
    cv::rectangle(img, brect, Scalar(255,0,0));
}
于 2013-03-23T19:47:44.377 回答