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]
- Python 运行报错:urllib3 网络连接创建失败,原因及排查建议(字节豆包 | 161点数解答 | 2024-10-31 00:39:36)434
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)320
- Java 利用 Apache Commons Imaging 压缩 PNG 图片至指定大小,附代码及注意事项(阿里通义 | 524点数解答 | 2024-02-27 13:54:15)287
- Python 实战:学生信息列表转字典、遍历、深拷贝及数据修改全流程(GPT | 422点数解答 | 2024-10-29 15:43:54)391
- Python实战:学生成绩列表转字典,深拷贝与数据修改操作全解析(字节豆包 | 254点数解答 | 2024-10-29 16:01:39)382
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)289
- Java调用Python接口中文乱码?设置UTF - 8编码一招解决!(讯飞星火 | 263点数解答 | 2024-06-06 17:07:59)370
- 解决Java调用Python接口中文乱码问题:设置UTF - 8编码全攻略(讯飞星火 | 160点数解答 | 2024-06-06 17:18:39)398
- Java调用Python接口中文乱码问题:字符编码统一解决方案(讯飞星火 | 344点数解答 | 2024-06-06 17:19:55)507
- 解决Java调用Python接口时中文值乱码问题:设置字符编码为UTF-8(讯飞星火 | 264点数解答 | 2024-06-06 17:27:09)369
- 医院系统:信息添加、查询与修改操作全流程展示( | 31点数解答 | 2024-05-22 11:20:34)483
- 超详细!Java使用ProcessBuilder调用Python脚本实现PPT转图片(讯飞星火 | 295点数解答 | 2024-06-06 17:07:15)313