int light(string imgName)
{
//Mat 转 IplImage
Mat M= imread(imgName);
IplImage *image = &IplImage(M);
IplImage * gray = cvCreateImage(cvGetSize(image), image->depth, 1);
//转为灰度图片
cvCvtColor(image, gray, CV_BGR2GRAY);
double sum = 0;
double avg = 0;
CvScalar scalar;
int ls[256];
for (int i = 0; i<256; i++)
ls[i] = 0;
for (int i = 0; i
{
for (int j = 0; j
{
scalar = cvGet2D(gray, i, j);
sum += (scalar.val[0] - 128);
int x = (int)scalar.val[0];
ls[x]++;
}
}
avg = sum / (gray->height * gray->width);
double total = 0;
double mean = 0;
for (int i = 0; i<256; i++)
{
total += abs(i - 128 - avg)* ls[i];
}
mean = total / (gray->height * gray->width);
double cast = abs(avg / mean);
cout << imgName << "亮度异常值:" << cast << endl;
if (cast>1)
{
if (avg > 0)
{
cout << "亮度异常 过亮" << avg << endl;
return 1;
}
else {
cout << "亮度异常 过暗" << avg << endl;
return -1;
}
}
else
{
cout << "normal" << endl;
return 0;
}
}
在这里插入图片描述
根据hsl中l=(max(R,G,B)+min(R,G,B))/2
用cvAvg分别计算R,G,B三通道平均值,最大与最小的平均值作为亮度
int light2(string imgName)
{
Mat img,gray;
img = imread(imgName);
IplImage *img1 = &IplImage(img);
CvScalar cs;
const char * c = imgName.c_str();
IplImage *src1;
src1 = cvLoadImage(c);
cs = cvAvg(src1);
double max1=max(cs.val[0],cs.val[1]), min1=min(cs.val[0],cs.val[1]);
cout <<"R"<
cout <<"B"<< cs.val[2] << endl;
cout << "亮度为" << (max(max1,cs.val[2]) + min(min1,cs.val[2]))/2 << endl;
return 0;
}
转为灰度图片,用cvAvg计算像素平均值作为亮度
int light(string imgName)
{
Mat img;
img = imread(imgName,0);
Scalar scalar = mean(img);
return scalar.val[0];
}
int main()
{
string img1Name,img2Name;
img1Name = "brightKurt.jpg";
img2Name = "darkKurt.jpg";
cout << "图片1 brightKurt" << endl;
cout << "方法1" << endl;
light(img1Name);
cout << "方法2" << endl;
light2(img1Name);
cout << "方法3" << endl;
light3(img1Name);
cout << endl << endl<< "图片2 darkKurt" << endl;
cout << "方法1" << endl;
light(img2Name);
cout << "方法2" << endl;
light2(img2Name);
cout << "方法3" << endl;
light3(img2Name);
Mat img1, img2;
img1 = imread(img1Name);
img2 = imread(img2Name);
imshow("img1 bright Kurt", img1);
imshow("img2 dark Kurt", img2);
waitKey(0);
return 0;
}