首页 文章

轮廓不等于轮廓[i]?

提问于
浏览
0

这是基于this question,它更侧重于OpenCV C所以我决定提出这个问题 . 这是我的计划的一部分:

vector<vector<Point> > contours;
vector<vector<Point> > largest_contours;

double largest_area = 0;
for(int i= 0; i < contours.size(); i++){
    double area = contourArea(contours[i]);
    if(area >= largest_area){
        largest_area = area;
        largest_contours = contours[i];  <---THIS is the problem
    }
}

基本上the program会做:

  • 扫描图像序列/视频中检测到的每个轮廓

  • 将轮廓标记为 contours[i]

  • 计算每个轮廓的面积

  • 根据区域比较 contours[i] . 更大的区域变成 largest_area ,最大的轮廓将成为 largest_contours

  • 最后, DrawContoursimshow

有问题的行将通过鼠标显示此消息:

Error: No operator "=" matches these operands

问题是, why is contours[i] is NOT equal to largest_contours 尽管它们具有相同的类( vector<vector<Point> > ),并且每次只有一个值用于每个轮廓?任何人都可以解释为什么以及如何解决它?

提前致谢 .

编辑(1):将 contourArea(contours) 更改为 contourArea(contours[i]) . 添加了 largest_contourscontours 的声明 .

2 回答

  • 1

    当你收集某些东西时,你似乎在混淆你猜测 vector<Point> 是你认为"contour"和 vector<vector<Point>> 是一组轮廓 .

    当你从0循环到 contours.size() 时,你正在研究 contourArea(contours) ,每次都会完全相同,因为你永远不会修改 contours . 在我看来,你想要找出一个单独轮廓的区域,应该做 contourArea(contours[i]) 之类的事情 .

    然后,如果您想要一个最大轮廓列表(类型为 vector<vector<Point>> ),则需要将找到的每个轮廓推入 vector . 如果 contours[i] 是要添加到列表中的轮廓,则可以使用 largest_contours.push_back(contours[i]); 执行此操作 .

  • 1

    这里有几个问题,如果没有完整的声明,你的问题的确切原因无法确定,但是有些事情看起来很奇怪:

    double area = contourArea(contours);
    

    这看起来像您确定所有轮廓的总面积 - 每次迭代 . 这听起来不对 .

    largest_contours = contours[i];
    

    这很可能失败,因为轮廓没有赋值运算符 . 如何保存索引(除非你想保留整个结构(?)) .

相关问题