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

彩色色板计数提速咨询:如何用Python替代Photoshop脚本实现高效统计

彩色色板计数Python实现方案

需求前提

  • 待统计色板为规则同尺寸,按棋盘格排列,颜色不固定,数量范围从数百到约9万不等
  • 示例图:swatch sample
  • 示例统计目标:上述仅含3种颜色的示例中,需统计得到浅绿方块数量为8

现有方案痛点

你目前在用的Photoshop JS脚本方案逻辑是逐点采样色板中心RGB值,存入数组后和预设色值匹配计数,对应原脚本如下:

var pointSample = app.activeDocument.colorSamplers.add([x,y]);

// Obtain array of RGB values.
var rgb = [
  Math.round(pointSample.color.rgb.red,0),
  Math.round(pointSample.color.rgb.green,0),
  Math.round(pointSample.color.rgb.blue,0)
];

colArr.push(rgb);
delete_all_colour_samples();

function delete_all_colour_samples()
{
  app.activeDocument.colorSamplers.removeAll();
}

该方案小样量下运行无延迟,但是样本量超过3000时耗时达到25秒,无法满足批量统计需求。

Python实现方案

用Python实现该功能性能远高于Photoshop脚本方案,9万样本量处理耗时可以控制在百毫秒级,核心用opencv-python和numpy两个库实现,具体如下:

实现逻辑

  1. 直接把整张图片加载为numpy数组,避免逐点采样的IO开销
  2. 根据提前已知的单个色板尺寸,批量计算所有色板的中心坐标,一次性取出所有中心位置的RGB值
  3. 用numpy的广播机制批量做色值匹配,完全规避Python层循环的性能损耗

依赖安装

pip install opencv-python numpy

完整代码

import cv2
import numpy as np

def count_swatches(image_path, swatch_w, swatch_h, target_rgb):
    # 读取图片并转成RGB格式
    img = cv2.imread(image_path)
    img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    h, w = img_rgb.shape[:2]
    
    # 计算横向、纵向色板数量
    col_count = w // swatch_w
    row_count = h // swatch_h
    
    # 批量生成所有色板的中心坐标
    x_centers = np.arange(swatch_w//2, w, swatch_w, dtype=np.int32)
    y_centers = np.arange(swatch_h//2, h, swatch_h, dtype=np.int32)
    
    # 一次性取出所有中心位置的RGB值
    sample_rgb = img_rgb[y_centers[:, None], x_centers]
    
    # 匹配目标色值并统计数量
    match_mask = (sample_rgb == target_rgb).all(axis=-1)
    return np.count_nonzero(match_mask)

# 调用示例
if __name__ == "__main__":
    # 替换为实际参数即可
    IMAGE_PATH = "你的色板图片路径.png"
    SWATCH_WIDTH = 20 # 单个色板的宽度,单位像素
    SWATCH_HEIGHT = 20 # 单个色板的高度,单位像素
    TARGET_COLOR = [144, 238, 144] # 要统计的目标色RGB值
    
    count = count_swatches(IMAGE_PATH, SWATCH_WIDTH, SWATCH_HEIGHT, TARGET_COLOR)
    print(f"目标色板数量:{count}")

额外说明

如果需要同时统计多种颜色,只需要把target_rgb改为多组色值的数组,调整匹配逻辑即可,不需要重复读取采样图片。

内容的提问来源于stack exchange,提问作者Ghoul Fool

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:36:05