• Opencv— — Bias and Gain


    // define head function
    #ifndef PS_ALGORITHM_H_INCLUDED
    #define PS_ALGORITHM_H_INCLUDED
    
    #include <iostream>
    #include <string>
    #include "cv.h"
    #include "highgui.h"
    #include "cxmat.hpp"
    #include "cxcore.hpp"
    #include "math.h"
    
    using namespace std;
    using namespace cv;
    
    void Show_Image(Mat&, const string &);
    
    #endif // PS_ALGORITHM_H_INCLUDED
    
    /*
    Adjust bias and gain.
    */
    
    #include "PS_Algorithm.h"
    
    float Bias(float a, float b);
    float Gain(float a, float b);
    
    int main()
    {
        string  Image_name("4.jpg");
        Mat Img=imread(Image_name.c_str());
        Mat Img_out(Img.size(), CV_32FC3);
    
        float gain_val = 0.75;   // 0-1
        float bias_val = 0.25;   // 0-1
    
        int width=Img.cols;
        int height=Img.rows;
    
        float val;
    
        for (int y=0; y<height; y++)
        {
            for (int x=0; x<width; x++)
            {
    
                for (int k=0; k<3; k++)
                {
    
                    val=(float)Img.at<Vec3b>(y, x)[k]/255;
    
                    val=Gain(val, gain_val);
    
                    Img_out.at<Vec3f>(y, x)[k]=Bias(val, bias_val);
    
                }
    
            }
    
        }
    
    
        Show_Image(Img_out, "New_img");
    
        cout<<"All is well."<<endl;
    
        waitKey();
    }
    
    
    float Bias(float a, float b)
    {
        float y;
    
        a=pow(a, log(b)/log(0.5));
    
        y=a/((1.0f/b-2)*(1.0f-a)+1);
    
        return y;
    
    }
    
    float Gain(float a, float b)
    {
        /*
            float p = log(1.0 - b) / log(0.5);
    
            if (a < .001)
                return 0.0f;
            else if (a > .999)
                return 1.0f;
            if (a < 0.5)
                return pow(2 * a, p) / 2;
            else
                return 1.0f - pow(2 * (1. - a), p) / 2;
        */
    
            float c = (1.0f/b-2.0f) * (1.0f-2.0f*a);
            if (a < 0.5)
                return a/(c+1.0f);
            else
                return (c-a)/(c-1.0f);
    
    
    }
    
    
    // define the show image
    #include "PS_Algorithm.h"
    #include <iostream>
    #include <string>
    
    using namespace std;
    using namespace cv;
    
    void Show_Image(Mat& Image, const string& str)
    {
        namedWindow(str.c_str(),CV_WINDOW_AUTOSIZE);
        imshow(str.c_str(), Image);
    
    }
    
    

    图像效果可以参考:

    http://blog.csdn.net/matrix_space/article/details/46790171

  • 相关阅读:
    Ubuntu18.04 更新gcc和g++的版本号
    mkimage uboot
    ubuntu终端进入secure boot 修改为disable
    apt install g++8riscv64linuxgnu
    计算机专用英语词汇1702个词汇表
    快收藏!高手Linux运维管理必备工具大全,你会吗?
    Cilium 架构设计与概念解析
    prometheus添加集群
    openkruise详解
    Windows11安装Ubantu 18.04 LTS
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9412528.html
Copyright © 2020-2023  润新知