美文网首页
调整图像对比度

调整图像对比度

作者: coolTigers | 来源:发表于2020-04-15 01:34 被阅读0次

    有些图像对比度太低,可以通过比例换算的方法提升对比度。


    image.png

    其中I是原始灰度值,O是结果灰度值。
    问题是如何确定Imax和Imin。此处使用一个百分比阈值,表示最小强度值0和最大强度值255像素的百分比。

    cv::Mat 
    EnhanceContrast(Mat src, Mat hist, double percent)
    {
        // 像素的百分比
        float number = src.total() * percent;
    
        // 找到直方图的左极限
        int imin = 0;
        for (float count = 0; imin< 256; ++imin) {
            // 小于或者等于imin的像素数量必须大于number
            if ((count += hist.at<float>(imin)) >= number) {
                break;
            }
        }
    
        // 找到直方图的右极限
        int imax = 255;
        for (float count = 0; imax  > 0;  --imax) {
            // 小于或者等于imin的像素数量必须大于number
            if ((count += hist.at<float>(imin)) >= number) {
                break;
            }
        }
    
        Mat result;
        Mat lut(1, 256, CV_8U);
        for (size_t i = 0; i < 256; i++) {
            lut.at<uchar>(i) = 255 * (i - imin) / (imax - imin) + 0;
        }
    
        LUT(src, lut, result);
        return result;
    
    }
    

    其中hist上计算得到的一维直方图。对比效果如下:


    image.png

    相关文章

      网友评论

          本文标题:调整图像对比度

          本文链接:https://www.haomeiwen.com/subject/qvnfvhtx.html