其他分享
首页 > 其他分享> > Qt中判断图像亮度是否正常获取亮度设置亮度的方法

Qt中判断图像亮度是否正常获取亮度设置亮度的方法

作者:互联网

一般亮度为128为正常

//判断亮度是否正常
int MainWindow::brightnessException (Mat InputImg)
{
    int calcResult;
    Mat GRAYimg;
    cv::cvtColor(InputImg,GRAYimg,COLOR_BGR2GRAY);
    float a=0;

    int Hist[256];
    for(int i=0;i<256;i++)
    {
        Hist[i]=0;
        for(int i=0;i<GRAYimg.rows;i++)
        {
            for(int j=0;j<GRAYimg.cols;j++)
            {

                a+=float(GRAYimg.at<int>(i,j)-128);//在计算过程中,考虑128为亮度均值点
                int x=GRAYimg.at<int>(i,j);
                Hist[x]++;
            }
        }

        float da=a/float(GRAYimg.rows*InputImg.cols);
        float D =abs(da);
        float Ma=0;
        for(int i=0;i<256;i++)
        {
            Ma+=abs(i-128-da)*Hist[i];
        }
        Ma/=float((GRAYimg.rows*GRAYimg.cols));
        float M=abs(Ma);
        float K=D/M;
        float cast = K;

        //        printf("亮度指数: %f\n",cast);
        if(cast>1)
        {
            //           printf("亮度:");
            if(da>0)
            {
                //                printf("过亮\n");
                calcResult=1;
            }
            else
            {
                //                printf("过暗\n");
                calcResult=-1;
            }
        }
        else
        {
            //            printf("亮度:正常\n");
            calcResult=0;
        }
        return calcResult;
    }
}



//获取图像亮度
double MainWindow::getAvg(Mat img)
{
    Mat gray;
    cvtColor(img, gray,COLOR_RGB2GRAY);
    Scalar scalar = mean(gray);
    return scalar.val[0];
}
//设置图像亮度
void MainWindow::setAvg(Mat scr,Mat dst, double avg)
{
    double fpreAvg = getAvg(scr);
    scr.convertTo(dst,scr.type(),avg/fpreAvg);
}

秋风写于淄博 业务联系与技术交流:375172665

标签:Qt,int,float,亮度,calcResult,图像,GRAYimg,Mat
来源: https://blog.csdn.net/hmwz0001/article/details/121303269