不使用平均色彩的图像缩放:300×300热图转10×10的实现难题
问题:保留色彩的热图缩放需求与解决思路
需求描述
- 将300×300像素的热图缩放至10×10尺寸
- 必须保留原有的3种色彩
- 色彩区域的位置需与原图大致相符
原热图(简化为3种颜色)

常规缩放的问题
使用cv2.resize(img, (ws,hs), interpolation = cv2.INTER_AREA)缩放后,得到平均色彩图像——位置接近原图,但色彩被平均,不符合需求:
尝试方法的问题
自行尝试的方法能保留原色彩,但色彩位置混乱:
现有基础信息
- 三种颜色的R值(图像以300×300数组
data_2_2_dim存储,仅保存R值):- Normal: 68
- Minor: 44
- Major: 232
- 核心思路:将原图划分为30×30的子数组,每个子数组对应10×10目标数组
data_3_2_dim的一个单元格 - 色彩优先级:Major > Minor > Normal(子数组中存在Major则对应单元格设为Major,以此类推)
现有实现代码
iter1 = 0 iter2 = 0 for i in range(data_3_2_dim.shape[0]): for j in range(data_3_2_dim.shape[1]): draft = np.zeros((30, 30)) val_no = 0 val_minor = 0 val_major = 0 for k in range(30): for l in range(30): # val = 68 if data_2_2_dim[iter1][iter2] == 44 and data_2_2_dim[iter1][iter2] != 232: val = 44 if data_2_2_dim[iter1][iter2] == 232: val = 232 if data_2_2_dim[iter1][iter2] == 68 and data_2_2_dim[iter1][iter2] != 232 and data_2_2_dim[iter1][iter2] != 44: val = 68 draft[k][l] = val iter1+=1 major = False minor = False for p in range(draft.shape[0]): for q in range(draft.shape[1]): if draft[p][q] == 232: major = True if draft[p][q] == 44: minor = True if minor == True and major == False: data_3_2_dim[j][i] = 44 elif major == True: data_3_2_dim[j][i] = 232 else: data_3_2_dim[j][i] = 68 iter2+=1 iter1 = 0 from matplotlib import pyplot as plt from matplotlib import colors import numpy as np fig, ax = plt.subplots() ax.imshow(data_3_2_dim) plt.show()
待解决问题
需要实现既保留原3种色彩,又使色彩位置与原图大致匹配的10×10图像缩放。
内容的提问来源于stack exchange,提问作者Moontasir Soumik
相关产品推荐
相关产品推荐

