static void HistogramBalance(AVFrame *src)
{
int counts[256], i, j, v, sum, total;
//counts统计,各个像素值数量,sum 累计数量,total总量,v当前像素值
double pcounts[256];// 累计概率值
for (i = 0;i <256; i++) {
//先初始化一下
counts[i] = 0;
pcounts[i] = 0.0;
}
//循环统计数量
for (i = 0; iheight; i++) {
for (j = 0; jwidth; j++) {
v = src->data[0][i * src->linesize[0] + j];
counts[v]++;
}
}
total = src->height * src->width;
sum = 0;
for (i = 0; i<256; i++) {
sum += counts[i];
//计算累计概率值
pcounts[i] = sum * 1.0/total;
}
for (i = 0; iheight; i++) {
for (j = 0; jwidth; j++) {
//调整像素值
v = src->data[0][i * src->linesize[0] + j];
v = pcounts[v] * 255;
src->data[0][i * src->linesize[0] + j] = v;
}
}
}