for (int i = 0; i < contours.size(); i++) { //先找到每个轮廓的面积 int area = contourArea(contours[i]); //打印出面积 cout << area << endl; if (area > 130 && area < 140 ) { float peri = arcLength(contours[i], true); vector<vector<Point>> conPoly(contours.size()); approxPolyDP(contours[i], conPoly[i], 0.02 * peri, true); vector<Rect> boundRect(contours.size()); //绘制矩形边界框,将含纳每一个独立的形状 boundRect[i] = boundingRect(conPoly[i]); //将边界框打印在原图上 rectangle(img1, boundRect[i].tl(), boundRect[i].br(), Scalar(0, 255, 0), 2); } }解释一下
时间: 2024-04-27 17:20:54 浏览: 66
opencv3/C++轮廓的提取与筛选方式
5星 · 资源好评率100%
这段代码是在对轮廓进行处理的过程中,找出满足一定条件的轮廓,并在原图上绘制出该轮廓对应的矩形边框。
具体流程如下:
1. 对于每一个轮廓,先计算其面积。
2. 如果该轮廓的面积在某个特定范围内(这里是130到140之间),则继续处理该轮廓。
3. 计算该轮廓的周长(即边界长度)。
4. 使用多边形逼近算法(`approxPolyDP`函数)对该轮廓进行逼近,得到近似多边形。
5. 创建一个矩形边界框(`Rect`类型),将该轮廓的边界框存储在`boundRect`向量中。
6. 在原图上绘制该轮廓对应的矩形边界框(`rectangle`函数)。
需要注意的是,这段代码中使用了一些向量(`vector`)类型的变量,例如`contours`、`conPoly`和`boundRect`。这些变量的作用是分别存储所有轮廓、多边形逼近后的轮廓和边界框。在处理过程中,这些向量会根据需要动态增长或缩小,以适应不同数量的轮廓。
阅读全文