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

如何从颜色字典匹配图片最相似颜色?代码调试求助

图片颜色识别程序的问题修正

代码中的核心问题

  • 重复读取图片且参数错误
    第一行img = cv2.imread('purple.jpg', cv2.COLOR_BGR2HSV)是错误用法,cv2.imread的第二个参数是读取模式(如cv2.IMREAD_COLOR),不是颜色转换标识。这行属于无效代码,直接删除即可。

  • 错误使用BGR图像做HSV范围匹配
    你已经将图片转换成HSV格式的hsv变量,但cv2.inRange却用了原始BGR格式的img——你的color_list定义的是HSV空间的范围,必须用hsv作为第一个参数传入,否则匹配逻辑完全失效。

  • HSV颜色范围定义错误
    现有color_list里的颜色范围不符合OpenCV的HSV标准(H:0-179,S:0-255,V:0-255):

    • 红色:OpenCV中红色分为H=0-10和H=170-179两段,且需要合理的饱和度、亮度阈值,你当前的红色范围S值为0,只能匹配灰度区域。
    • 白色/黑色:限制了S值为0,实际白色应是低饱和度(S<30)+高亮度,黑色应是低亮度(V<50),无需限制饱和度。
  • mask.sum调用错误
    mask.sum是numpy求和方法的引用,不是计算结果,必须写成mask.sum()才能获取匹配像素的总和。

  • 缺少“找相似度最高颜色”的逻辑
    原代码仅输出有匹配的颜色,未统计哪个颜色匹配像素最多,无法实现“找相似度最高”的需求。


修正后的完整代码

import cv2
import numpy as np

# 符合OpenCV标准的HSV颜色范围
color_list = {
    "white": ([0, 0, 200], [179, 30, 255]),
    "black": ([0, 0, 0], [179, 255, 50]),
    "red_low": ([0, 40, 40], [10, 255, 255]),
    "red_high": ([170, 40, 40], [179, 255, 255]),
    "green": ([40, 40, 40], [70, 255, 255]),
    "yellow": ([20, 40, 40], [40, 255, 255]),
    "blue": ([90, 40, 40], [130, 255, 255])
}

# 读取图片并转换为HSV格式
img = cv2.imread('purple.jpg')
if img is None:
    print("无法读取图片,请检查路径是否正确")
    exit()
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

max_match_pixels = 0
best_match_color = "未知"
red_total = 0

# 遍历颜色范围统计匹配像素数
for color_name, (lower, upper) in color_list.items():
    lower = np.array(lower, dtype=np.uint8)
    upper = np.array(upper, dtype=np.uint8)
    
    # 使用HSV图像做范围匹配
    mask = cv2.inRange(hsv, lower, upper)
    # 每个匹配像素值为255,除以255得到实际像素数量
    match_count = mask.sum() // 255

    # 合并红色两段的匹配数
    if color_name.startswith("red"):
        red_total += match_count
    else:
        if match_count > max_match_pixels:
            max_match_pixels = match_count
            best_match_color = color_name

# 单独比较红色的总匹配数
if red_total > max_match_pixels:
    max_match_pixels = red_total
    best_match_color = "red"

print(f"与图片颜色相似度最高的预设颜色是:{best_match_color},匹配像素数:{max_match_pixels}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:48:19