第26532题 程序题
C++实现256级灰度图像按频率优先规则压缩为16级灰阶

问题描述

  1. 灰度图像共256级灰阶,编码范围为00-FF(对应十进制0-255),每个像素点对应一个灰阶编码。请编写程序将其压缩为16级灰阶,对应编码0-F
  2. 压缩规则:
    • 统计所有灰阶的出现次数,取出现次数最多的前16种灰阶(若次数相同则按灰阶值从小到大排序),分别编号为0-F
    • 其余灰阶需转换为16种基准灰阶中最接近的灰阶:计算待转换灰阶与16种基准灰阶的差值绝对值,绝对值最小的即为目标灰阶。
  3. 输入输出要求:
    • 输入:多行等长字符串,每两个字符构成一个十六进制的像素灰阶值
    • 输出:首先连续输出选中的16种基准灰阶编码(不足16种按实际数量输出),随后按行输出压缩后的编码,每行长度与原输入行对应像素数量一致。

输入描述

  1. 第一行输入正整数n,表示像素数据的行数
  2. 后续输入n行等长的十六进制字符串,每行每两个字符为一个像素灰阶
  3. 注意:输入时cin/scanf等输入操作不得添加任何提示文本。

输出描述

  1. 首行输出选中的基准灰阶编码:按出现次数从多到少排序,次数相同则按灰阶值从小到大排序,每个灰阶为2位大写十六进制字符,连续拼接,最多32个字符(即16种灰阶),不足16种按实际输出。
  2. 后续n行输出压缩后的编码,每个像素对应1位大写十六进制字符(0-F),无空格,每行长度与原输入行的像素数量一致。

样例输入1

10
00FFCFAB00FFAC09071B5CCFAB76
00AFCBAB11FFAB09981D34CFAF56
01BFCEAB00FFAC0907F25FCFBA65
10FBCBAB11FFAB09981DF4CFCA67
00FFCBFB00FFAC0907A25CCFFC76
00FFCBAB1CFFCB09FC1AC4CFCF67
01FCCBAB00FFAC0F071A54CFBA65
10EFCBAB11FFAB09981B34CFCF67
01FFCBAB00FFAC0F071054CFAC76
1000CBAB11FFAB0A981B84CFCF66

样例输出1

ABCFFF00CB09AC07101198011B6776FC
321032657CD10E
36409205ACC16D
B41032657FD16D
8F409205ACF14D
324F326570D1FE
3240C245FC411D
BF4032687CD16D
8F409205ACC11D
B240326878D16E
83409205ACE11D
编辑模式