OpenCV(十一):色彩空间转换

核心函数

python 复制代码
dst = cv2.cvtColor(src, code)

参数解释:

  1. src : 待转换的源图像(通常是一个 NumPy 数组)。
  2. code : 转换代码,指定了源色彩空间到目标色彩空间的转换类型。

常见的色彩空间转换代码(code):

转换代码 描述
cv2.COLOR_BGR2GRAY BGR 格式(OpenCV默认)转为灰度图
cv2.COLOR_BGR2RGB BGR 转为 RGB (常用于Matplotlib显示)
cv2.COLOR_RGB2BGR RGB 转为 BGR
cv2.COLOR_BGR2HSV BGR 转为 HSV (色相、饱和度、亮度)
cv2.COLOR_HSV2BGR HSV 转为 BGR
cv2.COLOR_BGR2HLS BGR 转为 HLS (色相、亮度、饱和度)

为什么常用 HSV/HLS?

HSV(Hue, Saturation, Value)和 HLS(Hue, Lightness, Saturation)色彩空间在基于颜色 的目标检测或分割中非常有用,因为它们将颜色信息 (色相 H)与亮度信息(V/L)分离。这意味着可以在不同光照条件下更容易地提取特定颜色。

示例

python 复制代码
import cv2
import numpy as np

# 窗口名称
WINDOW_NAME = 'HSV Color Palette'

# 这是一个空函数,作为 cv2.createTrackbar 的回调函数。
# trackbar 变化时,如果不需要立即执行操作,可以使用它。
def nothing(x):
    pass

# 1. 创建窗口
cv2.namedWindow(WINDOW_NAME)

# 2. 创建滑块 (Trackbars)

# HSV 在 OpenCV 中,默认的 8 位图像范围如下:
# H (Hue, 色相): 0 - 179 (范围是 0-360 的一半)
# S (Saturation, 饱和度): 0 - 255
# V (Value/Brightness, 明度/亮度): 0 - 255

cv2.createTrackbar('H', WINDOW_NAME, 0, 179, nothing)
cv2.createTrackbar('S', WINDOW_NAME, 0, 255, nothing)
cv2.createTrackbar('V', WINDOW_NAME, 0, 255, nothing)

# 3. 主循环:实时获取滑块位置并更新颜色显示
while(True):
    # 退出机制:按下 'q' 键退出
    k = cv2.waitKey(1) & 0xFF
    if k == ord('q'):
        break

    # 4. 获取当前滑块位置
    h = cv2.getTrackbarPos('H', WINDOW_NAME)
    s = cv2.getTrackbarPos('S', WINDOW_NAME)
    v = cv2.getTrackbarPos('V', WINDOW_NAME)

    # 5. 创建一个 HSV 颜色块
    # 注意:为了让 OpenCV 识别为颜色,必须使用三维数组结构:
    # [[[H, S, V]]] - (1, 1, 3) 的 NumPy 数组
    hsv_color = np.uint8([[[h, s, v]]])

    # 6. 将 HSV 颜色转换为 BGR 颜色
    # cv2.imshow 只能显示 BGR/GRAY 图像,所以需要转换回来
    bgr_color = cv2.cvtColor(hsv_color, cv2.COLOR_HSV2BGR)

    # 7. 创建一个大图像来显示这个颜色 (例如 300x512)
    # img[:] = bgr_color[0][0] 将图像的所有像素设置为转换后的 BGR 颜色
    img = np.zeros((300, 512, 3), dtype=np.uint8)
    img[:] = bgr_color[0][0]

    # 8. 显示图像
    cv2.imshow(WINDOW_NAME, img)

# 9. 销毁所有窗口
cv2.destroyAllWindows()
相关推荐
NAGNIP11 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab12 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab12 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP16 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年16 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼16 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS16 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区17 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈17 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang18 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx