我刚刚开始使用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
中存储的数据来查找轮廓创建边界框的位置?
答案 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));
}