等高线不等于等高线[i]



这是基于这个问题,这个问题更关注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
    }
}

基本上程序将执行以下操作:

  1. 扫描图像序列/视频中检测到的每个轮廓
  2. 将等值线标记为contours[i]
  3. 计算每个等值线的面积
  4. 根据面积比较contours[i]。较大的区域变为largest_area,最大的轮廓将变为largest_contours
  5. 最后,DrawContoursimshow

有问题的行将在鼠标上显示以下消息:

Error: No operator "=" matches these operands

问题是,为什么contours[i]不等于largest_contours,尽管它们具有相同的类(vector<vector<Point> >),并且一次每个轮廓只有一个值?谁能解释为什么以及如何解决它?

提前谢谢。

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

你似乎在你收集一些东西和没有东西之间混淆了。我猜vector<Point>是你认为的"轮廓",vector<vector<Point>>是一组轮廓。

当你从 0 循环到 contours.size() 时,你正在制定contourArea(contours)每次都完全相同,因为你从不修改contours。在我看来,您想计算出单个轮廓的面积,并且应该做类似 contourArea(contours[i]) .

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

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

double area = contourArea(contours);

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

largest_contours = contours[i]; 

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

相关内容

  • 没有找到相关文章

最新更新