OpenCV 颜色空间转换

612 字
3 分钟
OpenCV 颜色空间转换

OpenCV 颜色空间转换#

OpenCV 默认读取彩色图是 BGR,而很多可视化工具和深度学习库习惯 RGB。颜色空间搞错时,图片不会报错,但颜色会明显不对。

这类问题很隐蔽,因为数组形状完全正常,只有显示效果异常。

BGR 转 RGB#

import cv2
import matplotlib.pyplot as plt
img_bgr = cv2.imread("demo.jpg")
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)
plt.imshow(img_rgb)
plt.axis("off")

用 matplotlib 显示 OpenCV 图片时,基本都要先转 RGB。

转灰度#

gray = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2GRAY)
print(gray.shape) # 只有高和宽,没有通道维度

边缘检测、阈值分割、轮廓检测前,经常会先转灰度。

HSV 的用途#

HSV 更适合按颜色范围做分割。比如提取某种颜色的区域时,直接在 RGB/BGR 上设阈值不如在 HSV 上稳定。

hsv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, (35, 50, 50), (85, 255, 255))

检查方式#

  • 显示图像时确认肤色、天空、红绿区域是否正常。

  • 打印 shape,确认灰度和彩色图维度不同。

  • 保存中间结果,避免只看最终模型输出。

实战复盘#

复用《OpenCV 颜色空间转换》时,我会先用三到五张图片跑通流程,再扩大到完整数据集。小样本阶段要故意覆盖正常图、边界图和可能失败的图,而不是只选最干净的样本。

OpenCV 和 YOLO 相关步骤都要特别关注坐标和尺寸。图片数组常用高宽顺序,检测框常用 x/y 顺序,YOLO 又使用归一化中心点坐标,混用后不会总是报错,但结果一定会偏。

后续如果要写成更完整教程,可以补充输入目录结构、输出目录结构和一张可视化样例,让读者能直接对照自己的项目。

最小验收样例#

验收《OpenCV 颜色空间转换》时,我会固定三张图片:一张正常样例、一张边界样例、一张容易失败的样例。每次改代码都用这三张图跑一遍,并保存输出结果。

视觉流程的验收必须能用眼睛确认。只打印数组 shape 或命令成功不够,至少要保存一张中间结果图或最终可视化图,确认处理效果和预期一致。

小结#

颜色空间错误不会让代码崩,但会让结果悄悄变差。读图、显示、训练之间要明确 BGR 和 RGB 的转换位置。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

OpenCV 颜色空间转换
https://blog.tjcheng.cn/posts/backfill/2026-05-31/opencv-color-space-note/
作者
TengJinCheng
发布于
2026-05-31
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
TengJinCheng
Hello, I'm Teng.
公告
欢迎来到TengJinCheng工作铺!
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
157
分类
7
标签
114
总字数
109,939
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.13.4
文章许可
CC BY-NC-SA 4.0

文章目录