首页 > 编程知识 正文

CCF计算机软件能力认证测试练习:202104-1灰度直方

时间:2023-05-03 09:21:06 阅读:234868 作者:2237

灰度直方图

来源:CCF

标签:

参考资料:

相似题目:

题目

一幅长宽分别为 n n n 个像素和 m m m 个像素的灰度图像可以表示为一个 n × m n times m n×m 大小的矩阵 A A A。其中每个元素 A i j A_{ij} Aij​( 0 ≤ i < n 0 leq i lt n 0≤i<n、 0 ≤ j < m 0 leq j lt m 0≤j<m)是一个 [ 0 , L ) [0, L) [0,L) 范围内的整数,表示对应位置像素的灰度值。具体来说,一个 8 8 8 比特的灰度图像中每个像素的灰度范围是 [ 0 , 128 ) [0, 128) [0,128)。
一副灰度图像的灰度统计直方图(以下简称“直方图”)可以表示为一个长度为 L L L 的数组 h h h,其中 h [ x ] h[x] h[x]( 0 ≤ x < L 0 leq x lt L 0≤x<L)表示该图像中灰度值为 x x x 的像素个数。显然, h [ 0 ] h[0] h[0] 到 h [ L − 1 ] h[L-1] h[L−1] 的总和应等于图像中的像素总数 n ⋅ m n cdot m n⋅m。
已知一副图像的灰度矩阵 A A A,试计算其灰度直方图 h [ 0 ] , h [ 1 ] , ⋯   , h [ L − 1 ] h[0], h[1], cdots, h[L-1] h[0],h[1],⋯,h[L−1]。

输入

输入共 n + 1 n + 1 n+1 行。
输入的第一行包含三个用空格分隔的正整数 n n n、 m m m 和 L L L,含义如前文所述。
第二到第 n + 1 n + 1 n+1 行输入矩阵 A A A。
第 i + 2 i + 2 i+2( 0 ≤ i < n 0 leq i lt n 0≤i<n)行包含用空格分隔的 m m m 个整数,依次为 A i 0 , A i 1 , ⋯   , A i ( m − 1 ) A_{i0}, A_{i1}, cdots, A_{i(m-1)} Ai0​,Ai1​,⋯,Ai(m−1)​。

输出

输出仅一行,包含用空格分隔的 L L L 个整数 h [ 0 ] , h [ 1 ] , ⋯   , h [ L − 1 ] h[0], h[1], cdots, h[L-1] h[0],h[1],⋯,h[L−1],表示输入图像的灰度直方图。

输入样例1

4 4 16
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15

输出样例1

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

输入样例2

7 11 8
0 7 0 0 0 7 0 0 7 7 0
7 0 7 0 7 0 7 0 7 0 7
7 0 0 0 7 0 0 0 7 0 7
7 0 0 0 0 7 0 0 7 7 0
7 0 0 0 0 0 7 0 7 0 0
7 0 7 0 7 0 7 0 7 0 0
0 7 0 0 0 7 0 0 7 0 0

输出样例2

48 0 0 0 0 0 0 29

解题思路

请参考代码理解。

参考代码 #include <cstdio>#define MAXL 256int h[MAXL];int main(){ int n, m, l; int readin; scanf("%d%d%d", &n, &m, &l); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { scanf("%d", &readin); h[readin]++; } } for (int i = 0; i < l; i++) { printf("%d ", h[i]); } return 0;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。