You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于映射字典替换二维数组指定维度值(HSV图像饱和度调整)

嵌套列表元素替换及HSV图像色相-饱和度映射实现

问题说明

需要实现以下操作:遍历嵌套列表中的每个子列表,若子列表第一个元素匹配指定字典的键,则将该子列表的第二个元素替换为字典对应的值。该逻辑可直接适配HSV格式图像的色相-饱和度映射需求(类似After Effects中的色相饱和度曲线功能)。

示例:
原列表:

L = [[1,2,3],[4,5,6],[7,8,9]]

映射字典:

D = {'1':50, '4':10, '7':20}

处理后结果:

[[1,50,3],[4,10,6],[7,20,9]]

解决方案

1. 原地修改原嵌套列表

直接遍历原列表,对符合条件的子列表进行修改,适合不需要保留原数据的场景:

L = [[1,2,3],[4,5,6],[7,8,9]]
D = {'1':50, '4':10, '7':20}

for sublist in L:
    hue_key = str(sublist[0])  # 转字符串匹配字典键
    if hue_key in D:
        sublist[1] = D[hue_key]  # 替换第二个元素

print(L)  # 输出: [[1,50,3],[4,10,6],[7,20,9]]

2. 生成新列表(保留原数据)

如果需要保留原始列表,用列表推导式生成新列表:

L = [[1,2,3],[4,5,6],[7,8,9]]
D = {'1':50, '4':10, '7':20}

new_L = [
    [sublist[0], D[str(sublist[0])], sublist[2]] if str(sublist[0]) in D else sublist.copy()
    for sublist in L
]

print(new_L)  # 输出修改后的新列表
print(L)      # 原列表不受影响

3. HSV图像场景高效实现

处理OpenCV读取的HSV图像(numpy数组格式)时,用向量化操作替代逐像素遍历,效率更高:

import numpy as np

# 模拟HSV图像,形状为(高度, 宽度, 3),通道顺序H、S、V
hsv_img = np.array([
    [[1,2,3], [4,5,6]],
    [[7,8,9], [2,10,11]]
], dtype=np.uint8)

# 色相-饱和度映射字典
hue_sat_map = {'1':50, '4':10, '7':20}

# 创建映射数组,适配OpenCV的H通道范围(0-179)
max_hue = 180
sat_mapping = np.arange(max_hue, dtype=np.uint8)
for hue_str, sat_val in hue_sat_map.items():
    hue = int(hue_str)
    if 0 <= hue < max_hue:
        sat_mapping[hue] = sat_val

# 批量替换饱和度通道
hsv_img[..., 1] = sat_mapping[hsv_img[..., 0]]

print(hsv_img)

小贴士

  • 注意字典键的类型:示例中字典键是字符串,需将子列表的数值型第一个元素转为字符串后再匹配,避免类型不匹配导致查找失败。
  • 图像处理优先用向量化操作:逐像素遍历在大尺寸图像上会非常慢,numpy的向量化操作能显著提升处理速度。
  • 数据备份:如果原始数据需要保留,一定要用生成新列表/数组的方式,避免原地修改造成数据丢失。

内容的提问来源于stack exchange,提问作者rummy rummyrum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 03:30:46