C++ 单独边界框的大小?

C++ 单独边界框的大小?,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; fo

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

您的边界框是
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;
    }
}
std::vector VBoundingBox;//假设这里有你所有的箱子
int largestrea=0;
CvRect*pLargestBox=NULL;
对于(自动it=vboundingbox.begin();it!=vboundingbox.end();+it)
{
CvRect*pccurrentbox=*it;
int iArea=pCurrentBox->宽度*pCurrentBox->长度;
如果(iArea>大面积)
{
大盖斯特面积=iArea;
pLargestBox=pccurrentbox;
}
}

你读过这篇文章吗?最大的周长将是最简单的计算方法。good read@AurélienOoms谢谢!是的,它们属于cv::矩形类型。我用那个密码试试看。谢谢嘿@Cyber我又看了一遍代码,想知道pLargestBox和pccurrentbox实际上是什么。我的意思是它们是某种变量吗?因为我没有看到它们被定义。@TheAlPaca02它们是指向
CvRect
对象的指针。我假设在
vboundingbox
中有这些对象的向量。因此,我一次循环一个向量,并取消引用迭代器
*it
,它包含
CvRect
对象。你熟悉指针吗?如果没有,其中一些可能需要进一步解释。是的,我对指针很熟悉,只是我从来没有见过用“p”作为前缀来声明它们。这里的每个人都使用asterix哈哈。谢谢你清理了我的不确定性@阿尔帕卡02哦,也就是说,它是一种被广泛接受的命名方式。变量名以bFlag(bool)、dAnswer(double)、pThingy(pointer)等类型的第一个字母开头。