CCF 202104-1 灰度直方图解析

题目链接

计算机软件能力认证考试系统CCF 202104-1 灰度直方图解析http://118.190.20.162/view.page?gpid=T128

题目分析

        图像的直方图在生活中很常见,在拍摄时可以辅助我们判断曝光是否合理。打开图像处理工具,选取“曲线”功能,就能看到制定颜色的直方图。

CCF 202104-1 灰度直方图解析

 

       该题可以用一个二维数组存储矩阵,数组中每个元素的值表示对应像素的灰度。再用一个一维数组存储对应的直方图,该数组一开始应当把每个元素初始化为 0 。遍历整个数组时,将每一个元素的灰度加到直方图中对应位置,便可得到整个图片的直方图。

/* CCF 202104-1 灰度直方图 */

#include<iostream>
#define MAX 500 // 矩阵最大边长
using namespace std;

/*====================函数声明=====================*/

void Ori_Gray(int light,int gray[MAX]);
// 函数功能:初始化灰度直方图为 0 数组
/// 参数说明:传入灰度上限及灰度直方图数组

void Input_Array(int m, int n, int str[MAX][MAX]);
// 函数功能:输入矩阵各个元素
/// 参数说明:传入矩阵长、宽以及待输入矩阵

void Gray_Pic(int m, int n, int str[MAX][MAX], int gray[MAX]);
// 函数功能:把矩阵转换为灰度直方图
// 调用该函数前请确保 gray 数组已经初始化!
/// 参数说明:传入矩阵长、宽、矩阵本身以及空的灰度图数组

/*====================声明结束=====================*/

int main(int argc, char* argv[])
{
    int m, n, light; // 长、宽和灰度
    int str[MAX][MAX]; // 存储图片的矩阵
    int gray[MAX]; // 存储灰度图
    cin >>m>>n>>light;

    Input_Array(m,n,str);
    Ori_Gray(light,gray);
    Gray_Pic(m,n,str,gray);

    for(int i=0;i<light;i++)
    {
        cout <<gray[i]<<" ";
    }
    return 0;
}

/*====================函数实现=====================*/

void Gray_Pic(int m, int n, int str[MAX][MAX], int gray[MAX])
/// 函数功能:把矩阵转换为灰度图
/// 参数说明:传入矩阵长、宽、矩阵本身以及空的灰度图数组
{
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            int t = str[i][j];
            gray[t] += 1;
        }
    }
    return;
}

void Input_Array(int m, int n, int str[MAX][MAX])
// 函数功能:输入矩阵各个元素
{
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            cin >>str[i][j];
        }
    }
}

void Ori_Gray(int light,int gray[MAX])
// 函数功能:初始化灰度直方图为 0 数组
/// 参数说明:传入灰度上限及灰度直方图数组
{
    for(int i=0;i<light;i++)
    {
        gray[i] = 0;
    }
    return;
}

上一篇:图像阈值分割代码模板


下一篇:复杂背景的缺陷提取