【问题标题】:Size of separate bounding boxes?单独边界框的大小?
【发布时间】:2014-07-13 04:37:44
【问题描述】:

我想制作一个软件,它可以检测图像中的所有对象并删除除最大对象之外的所有对象。我绘制了所有单独的边界框和轮廓,但是如何比较每个不同边界框/轮廓的大小以找出哪个最大?

【问题讨论】:

标签: c++ opencv codeblocks bounding-box


【解决方案1】:

您的边界框是CvRect 对象吗?假设“最大”意味着最大的区域,你可以做这样的事情。

std::vector<CvRect*> vBoundingBoxes;    // assume this has all your boxes
int largestArea = 0;
CvRect* pLargestBox = NULL;

for (auto it = vBoundingBoxes.begin(); it != vBoundingBoxes.end(); ++it)
{
    CvRect* pCurrentBox = *it;
    int iArea = pCurrentBox->width * pCurrentBox->length;
    if (iArea > largestArea)
    {
        largestArea = iArea;
        pLargestBox = pCurrentBox;
    }
}

【讨论】:

  • 是的,它们属于 cv::rectangle 类型。我会用那个代码试一试。谢谢!
  • 嘿@Cyber​​ 我又在看这段代码,想知道'pLargestBox & pCurrentBox 究竟是什么。我的意思是它们是某种变量吗?因为我没有看到它们被定义..
  • @TheAlPaca02 它们是指向CvRect 对象的指针。我假设您在vBoundingBoxes 中有这些对象的向量。所以我一次循环遍历该向量,并取消引用迭代器*it,其中包含CvRect 对象。你熟悉指针吗?如果不是,其中一些可能需要进一步解释。
  • 是的,我对指针很熟悉,只是我从来没有见过一个'p'作为前缀来声明它们。这里的每个人都使用星号哈哈。感谢您消除我的不确定性!
  • @TheAlPaca02 哦,那叫Hungarian Notation,是一种被广泛接受的命名方式。变量名称以 bFlag (bool)、dAnswer (double)、pThingy (pointer) 等类型的第一个字母开头。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多