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