【问题标题】:gamma correction in opencv hog.cppopencv hog.cpp 中的伽玛校正
【发布时间】:2013-05-16 16:47:29
【问题描述】:

我不明白 opencv 中 hog.cpp 中 gamma 校正的代码,我浏览了一些链接 here 与 opencv hog.cpp 中的代码不匹配

Mat_<float> _lut(1, 256);

const float* lut = &_lut(0,0);

if( gammaCorrection )
    for( i = 0; i < 256; i++ )
        _lut(0,i) = std::sqrt((float)i);
else
    for( i = 0; i < 256; i++ )
        _lut(0,i) = (float)i;

我从代码中了解到的只是它创建了 1x256 的二维数组,如果伽玛校正为真,它将计算数据的平方根。我尝试调试与此代码相关的所有文件,但我理解。谁能简单地说一下这里发生了什么。

请帮忙
提前致谢。

【问题讨论】:

    标签: opencv image-processing object-detection


    【解决方案1】:

    您所做的只是建立一个查找表;你知道传入的数据是字符,所以所有像素只能有 0-255 的值,所以如果你正在做伽玛校正,你会预先计算平方根。这将在稍后在每像素梯度计算中使用。 稍后在 computeGradients() 中,您将获得行指针:

    const uchar* imgPtr  = img.data + img.step*ymap[y];
    

    然后索引查找表以获取 [ -1 0 1 ] 渐变的像素值:

            for( x = 0; x < width; x++ )
            {
                int x1 = xmap[x];
    
                dbuf[x] = (float)(lut[imgPtr[xmap[x+1]]] - lut[imgPtr[xmap[x-1]]]);
                dbuf[width + x] = (float)(lut[nextPtr[x1]] - lut[prevPtr[x1]]);
            }
    

    【讨论】:

    • @Sharath 请考虑接受这个作为正确答案,如果它解决了您的问题,请点击左侧的小复选标记。
    猜你喜欢
    • 2018-12-04
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多