groupRectangles 源码分析

本文分析了OpenCV 2.4.9版本中CascadeClassifier::detectMultiScale为人脸识别生成候选框后,如何使用groupRectangles函数合并相似矩形。通过对SimilarRect比较运算符的解读,解释了判断两个矩形是否相似的依据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分析的OpenCV版本是:OpenCV 2.4.9

当使用void CascadeClassifier::detectMultiScale做人脸识别的时候,根据滑窗机制会产生很多的候选框,候选框间会相互交叠,相互包含等,读了opencv的源码之后,发现最后合并候选框的函数是groupRectangles,最后贴出源码,进行简单的分析。

void CascadeClassifier::detectMultiScale( const Mat& image, vector<Rect>& objects,
                                          double scaleFactor, int minNeighbors,
                                          int flags, Size minObjectSize, Size maxObjectSize)

void groupRectangles(vector<Rect>& rectList, int groupThreshold, double eps, vector<int>* weights, vector<double>* levelWeights)
{
    /*
      当组合阈值groupThreshold小于等于0的时候,如果输出weights,
      则weights中返回与rectList同样个数个1,函数直接返回,不进行合并操作
    */
    if( groupThreshold <= 0 || rectList.empty() )
    {
        if( weights )
        {
            size_t i, sz = rectList.size();
            weights->resize(sz);
            for( i = 0; i < sz; i++ )
                (*weights)[i] = 1;
        }
        return;
    }


    // 调用partition函数对rectList中的矩形进行分类
    // 其中nclasses表示组合类别,labels表示每个rect属于哪个类别的,相似度计算使用SimilarRects类
    vector<int> labels;
    int nclasses = partition(rectList, labels, SimilarRects(eps));


    vector<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值