如何在轮廓周围绘制一个矩形?

时间:2013-03-23 18:38:31

标签: opencv contour edge-detection

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

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中的第三个参数是vector<Vec4i>与findContours期望的类型不匹配。这是为什么?
2.如何使用contours中存储的数据来查找轮廓创建边界框的位置?

1 个答案:

答案 0 :(得分: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));
}