该函数的功能为计算彩色直方图,并返回最大值。
本人原创代码,转载或引用请注明出处。
void ColorEnhance::getMaxcolor(Mat &image,int *max_color)
{
int **temp_array=NULL;
int *merge;
merge = new int[MAX_LENGTH];
temp_array = new int *[CHANNELS];
for (int i = 0;i < CHANNELS;i++)
{
if (i == 0)
merge[i] = { 0 };
temp_array[i] = new int[MAX_LENGTH];
memset(temp_array[i], 0, MAX_LENGTH * sizeof(int));
}
for (int i = 0;i < image.rows;i++)
{
for (int j = 0;j < image.cols;j++)
{
temp_array[0][(int)image.at<Vec3b>(i, j)[0]]++; //2017版本的vs需要强制转换成int型数据;
temp_array[1][(int)image.at<Vec3b>(i, j)[1]]++;
temp_array[2][(int)image.at<Vec3b>(i, j)[2]]++;
}
}
Merge_arrray_Pri(temp_array[0], temp_array[1], temp_array[2], merge);
int max_pos = Quick_search(merge);
max_color[0] = temp_array[0][max_pos];
max_color[1] = temp_array[1][max_pos];
max_color[2] = temp_array[2][max_pos];
for (int i=0;i < CHANNELS;i++)
{
if (temp_array[i] != NULL)
{
delete temp_array[i];
temp_array[i] = NULL;
}
}
delete[] temp_array;
temp_array = NULL;
delete[] merge;
merge = NULL;
}
void ColorEnhance::Merge_arrray_Pri(int *array1, int *array2, int *array3, int *output)
{
int Arry_legth1 = sizeof(array1) / sizeof(array1[0]);
int Arry_legth2 = sizeof(array2) / sizeof(array2[0]);
int Arry_legth3 = sizeof(array3) / sizeof(array3[0]);
try {
if ((Arry_legth1 == 0) || (Arry_legth2 == 0) || (Arry_legth3 == 0))
throw 0;
if ((Arry_legth1 != Arry_legth2) || (Arry_legth1 != Arry_legth3) || (Arry_legth3 != Arry_legth2))
throw 1;
else
{
for (int i = 0;i < Arry_legth1;i++)
output[i] = array1[i] + array2[i] + array3[i];
}
}
catch (int e)
{
switch (e)
{
case 0:
cout << "one of the arrays is empty!" << endl;
break;
case 1:
cout << "Inputed arrays are not euqaled-length!" << endl;
break;
default:
cout << "unknow error!" << endl;
break;
}
}
}
int ColorEnhance::Quick_search(int *input)
{
int Arry_legth = sizeof(input) / sizeof(input[0]);
assert(Arry_legth == 0);
int max_num = 0;
int k = 0;
max_num = input[0];
for (int i = 0;i < Arry_legth;i++)
{
if (max_num < input[i])
{
max_num = input[i];
k = i;
}
}
return k;
}
本文介绍了一个用于计算彩色图像直方图并找出最大颜色值的原创算法。通过遍历图像的每个像素,统计RGB各通道的颜色频率,然后合并数组并使用快速查找算法确定最高频率的颜色位置。

5050

被折叠的 条评论
为什么被折叠?



