当前位置: 首页 > news >正文

【opencv-Python学习笔记(3):色彩空间类型及其转换】

1. 熟悉常见的色彩空间,熟悉转换函数

1.常见的色彩空间

## RGB(三通道)

 基于三原色(红、绿、蓝)混合形成所有颜色,每个通道用0-255的数值表示强度(uint8类型)。 

  RGB:通道顺序为“红(R)→绿(G)→蓝(B)”(如电脑屏幕、图像编辑软件默认格式)。  

  BGR:通道顺序为“蓝(B)→绿(G)→红(R)”(**OpenCV的默认格式**,读取图像时自动按此顺序存储)。  

注意事项:

  OpenCV的`imread()`函数读取图像后,默认是BGR格式,而非日常认知的RGB。若需用其他库(如Matplotlib)显示,需先转换为RGB,否则颜色会失真(比如红色会显示为蓝色)。

##Grayscale(灰度,单通道)

使用场景: 预处理步骤(如人脸识别、文字识别)、边缘检测(如Canny算法)、需要简化计算的场景。  

## HSV(三通道)  

  • H(色相):表示颜色种类(如红、绿、蓝),范围0-179(OpenCV定义,对应实际0-360°,需注意与其他软件的差异)。  
  •  S(饱和度):表示颜色的鲜艳程度(0为灰色,255为纯色),范围0-255。  
  •   V(明度):表示颜色的明亮程度(0为黑,255为最亮),范围0-255。 (H)”和“亮度(V)”,对光照变化的鲁棒性更强。例如,同一物体在不同光照下,V可能变化很大,但H基本稳定,因此比RGB更适合**颜色检测

优势: 分离了“颜色(H)”和“亮度(V)”,对光照变化的鲁棒性更强。例如,同一物体在不同光照下,V可能变化很大,但H基本稳定,因此比RGB更适合**颜色检测


2. 转换函数

函数:cv2.cvtColor(src, code)

  • src:输入图像(需为numpy数组)。  
  • code:转换码(指定从哪种空间转换到哪种空间)。
转换场景转换码(OpenCV)说明
BGR → RGBcv2.COLOR_BGR2RGB解决 OpenCV 与显示库的格式冲突
BGR → Grayscalecv2.COLOR_BGR2GRAY转为灰度图
BGR → HSVcv2.COLOR_BGR2HSV用于颜色检测
BGR → YCrCbcv2.COLOR_BGR2YCrCb用于图像压缩或肤色检测
HSV → BGRcv2.COLOR_HSV2BGRHSV 结果转回 BGR 以便显示

例子:

import cv2
import matplotlib.pyplot as plt# 读取图像(默认BGR格式)
img_bgr = cv2.imread("test.jpg")# 1. BGR转RGB(用于Matplotlib显示)
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)# 2. BGR转灰度图
img_gray = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2GRAY)# 3. BGR转HSV
img_hsv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HSV)# 显示结果
plt.subplot(221), plt.imshow(img_bgr), plt.title("BGR")  # 颜色失真(因Matplotlib默认RGB)
plt.subplot(222), plt.imshow(img_rgb), plt.title("RGB")
plt.subplot(223), plt.imshow(img_gray, cmap="gray"), plt.title("Grayscale")
plt.subplot(224), plt.imshow(img_hsv), plt.title("HSV")
plt.show()

注意事项:

  • HSV 范围差异:OpenCV 中 H 的范围是 0-179(对应实际 0-360°),若从其他工具(如 Photoshop)获取 HSV 阈值,需将 H 值除以 2(例如 PS 中的 H=60,对应 OpenCV 中 H=30)。
  • 数据类型:转换后图像仍为 uint8 类型(0-255),若需更高精度,可先转为 float32 类型。
  • 通道顺序:始终牢记 OpenCV 的默认是 BGR,避免在显示或与其他库交互时出现颜色错误。

不同色彩空间适用于不同场景:

  • 显示 / 基础处理用BGR/RGB
  • 简化计算用Grayscale
  • 颜色检测用HSV
  • 图像压缩用YCrCb

http://www.dtcms.com/a/329071.html

相关文章:

  • 【Abp.VNext】Abp.Vnext框架模块学习
  • 工业元宇宙:迈向星辰大海的“玄奘之路”
  • TCP客户端Linux网络编程设计详解
  • docker+nginx+keepalived+openappsec+web ui+crowdsec部署安全代理
  • IDEA创建一个VUE项目
  • SVN提交服务器拒绝访问的问题
  • 服务器硬件电路设计之 I2C 问答(五):I2C 总线数据传输方向如何确定、信号线上的串联电阻有什么作用?
  • 从零开始搭建私服务器
  • opencv:直方图
  • 【AI论文】GLM-4.5:具备智能体特性、推理能力与编码能力的(ARC)基础模型
  • Visual Studio Code 跨平台快捷键指南:Windows 与 macOS 全面对比
  • 第十三节:后期处理:效果增强
  • 开发避坑指南(24):RocketMQ磁盘空间告急异常处理,CODE 14 “service not available“解决方案
  • 2025年,Javascript后端应该用 Bun、Node.js 还是 Deno?
  • python基于Hadoop的超市数据分析系统
  • 高防CDN和高防IP的各自优势
  • Sklearn 机器学习 异常值检测 孤立深林
  • 《设计模式之禅》笔记摘录 - 15.观察者模式
  • 【完整源码+数据集+部署教程】军事伪装目标分割系统源码和数据集:改进yolo11-EMSC
  • 最新去水印小程序系统 前端+后端全套源码 多套模版 免授权
  • Four.Meme 重大更新:Bonding Curve Cap 从 24 BNB 降至 18 BNB,这意味着什么?
  • 浏览器面试题及详细答案 88道(23-33)
  • 【密码学实战】国密SM2算法介绍及加解密/签名代码实现示例
  • 用了Cursor AI之后,我的编程效率翻倍了?——一位程序员的真实体验分享
  • Java毕业设计选题推荐 |基于SpringBoot的水产养殖管理系统 智能水产养殖监测系统 水产养殖小程序
  • 二层业务端口相关配置
  • STM32H743开发周记问题汇总(串口通讯集中)
  • 免费生成视频,Coze扣子工作流完全免费的视频生成方案,实现图生视频、文生视频
  • Windows 系统 上尝试直接运行 .sh(Shell 脚本)文件
  • 从感知到执行:人形机器人低延迟视频传输与多模态同步方案解析