酷代码 AI
菜单
服务商

256级灰阶图像压缩为16级灰阶的Python实现

以下是实现该功能的Python代码: ```python # 读取输入 n = int(input()) image = [] # 统计每种灰阶的数量 gray_count = {} for _ in range(n): line = input() image.append(line) for i in range(0, len(line), 2): gray = line[i:i+2] if gray in gray_count: gray_count[gray] += 1 else: gray_count[gray] = 1 # 对灰阶按数量排序,数量相同时按灰阶值排序 sorted_grays = sorted(gray_count.items(), key=lambda x: (-x[1], x[0])) # 选取数量最多的前16种灰阶 selected_grays = [gray for gray, _ in sorted_grays[:16]] # 输出选定的16种灰阶 print(''.join(selected_grays)) # 构建灰阶到编号的映射 gray_to_index = {gray: index for index, gray in enumerate(selected_grays)} # 压缩图像 for line in image: compressed_line = "" for i in range(0, len(line), 2): gray = line[i:i+2] if gray in selected_grays: compressed_line += hex(gray_to_index[gray])[2:] else: # 找到最近的16种灰阶 min_diff = float('inf') nearest_index = 0 for index, sel_gray in enumerate(selected_grays): diff = abs(int(gray, 16) - int(sel_gray, 16)) if diff < min_diff or (diff == min_diff and index < nearest_index): min_diff = diff nearest_index = index compressed_line += hex(nearest_index)[2:] print(compressed_line) ``` 以下是对代码的解释: 1. **读取输入**:首先读取图像的行数`n`,然后逐行读取图像数据,将每行存储在`image`列表中。统计每种灰阶的出现次数,存储在`gray_count`字典中。 2. **选取前16种灰阶**:对`gray_count`进行排序,按出现次数从大到小排序,若出现次数相同则按灰阶值从小到大排序。选取前16种灰阶存储在`selected_grays`列表中,并输出这16种灰阶。 3. **构建映射**:创建一个字典`gray_to_index`,将选取的16种灰阶映射到编号0 - F。 4. **压缩图像**:遍历原图像的每个像素,若该像素的灰阶在选取的16种灰阶中,直接使用其对应的编号;否则,找到最近的16种灰阶之一,并使用其编号。最后输出压缩后的图像。 ######[AI问答 | 675点数解答 | 2026-02-14 20:17:48]

相关提问
发财导航,免费问AI
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]