zoukankan      html  css  js  c++  java
  • opencv calcHistLookupTables_8u

    opencv  calcHistLookupTables_8u

    static void calcHistLookupTables_8u( const Mat& hist, const SparseMat& shist,
                             int dims, const float** ranges, const double* uniranges,
                             bool uniform, bool issparse, std::vector<size_t>& _tab )
    {
        const int low = 0, high = 256;
        int i, j;
        _tab.resize((high-low)*dims);
        size_t* tab = &_tab[0];
    
        if( uniform )
        {
            for( i = 0; i < dims; i++ )
            {
                double a = uniranges[i*2];
                double b = uniranges[i*2+1];
                int sz = !issparse ? hist.size[i] : shist.size(i);
                size_t step = !issparse ? hist.step[i] : 1;
    
                for( j = low; j < high; j++ )
                {
                    int idx = cvFloor(j*a + b);
                    size_t written_idx;
                    if( (unsigned)idx < (unsigned)sz )
                        written_idx = idx*step;
                    else
                        written_idx = OUT_OF_RANGE;
    
                    tab[i*(high - low) + j - low] = written_idx;
                }
            }
        }
        else if (ranges)
        {
            for( i = 0; i < dims; i++ )
            {
                int limit = std::min(cvCeil(ranges[i][0]), high);
                int idx = -1, sz = !issparse ? hist.size[i] : shist.size(i);
                size_t written_idx = OUT_OF_RANGE;
                size_t step = !issparse ? hist.step[i] : 1;
    
                for(j = low;;)
                {
                    for( ; j < limit; j++ )
                        tab[i*(high - low) + j - low] = written_idx;
    
                    if( (unsigned)(++idx) < (unsigned)sz )
                    {
                        limit = std::min(cvCeil(ranges[i][idx+1]), high);
                        written_idx = idx*step;
                    }
                    else
                    {
                        for( ; j < high; j++ )
                            tab[i*(high - low) + j - low] = OUT_OF_RANGE;
                        break;
                    }
                }
            }
        }
        else
        {
            CV_Error(Error::StsBadArg, "Either ranges, either uniform ranges should be provided");
        }
    }

    代码参考:opencv-3.4.1modulesimgprocsrchistogram.cpp

    ###############################################

    QQ 3087438119
  • 相关阅读:
    设计模式之观察者模式
    设计模式之备忘录模式
    设计模式之中介者模式
    设计模式之迭代器模式
    设计模式之解释器模式
    设计模式之命令模式
    设计模式之职责链模式
    设计模式之代理模式
    设计模式之享元模式
    设计模式之外观模式
  • 原文地址:https://www.cnblogs.com/herd/p/15429793.html
Copyright © 2011-2022 走看看