【发布时间】:2014-07-13 04:37:44
【问题描述】:
我想制作一个软件,它可以检测图像中的所有对象并删除除最大对象之外的所有对象。我绘制了所有单独的边界框和轮廓,但是如何比较每个不同边界框/轮廓的大小以找出哪个最大?
【问题讨论】:
-
最大周长最容易计算
-
好读 @AurélienOoms 谢谢!
标签: c++ opencv codeblocks bounding-box
我想制作一个软件,它可以检测图像中的所有对象并删除除最大对象之外的所有对象。我绘制了所有单独的边界框和轮廓,但是如何比较每个不同边界框/轮廓的大小以找出哪个最大?
【问题讨论】:
标签: c++ opencv codeblocks bounding-box
您的边界框是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;
}
}
【讨论】:
CvRect 对象的指针。我假设您在vBoundingBoxes 中有这些对象的向量。所以我一次循环遍历该向量,并取消引用迭代器*it,其中包含CvRect 对象。你熟悉指针吗?如果不是,其中一些可能需要进一步解释。