OpenCV计算机视觉开发入门与实践<十三>:图像转换之灰度图、二值图
1.图像转换颜色变换是 imgproc 模块中一个常用的功能。我们生活中大多数看到的彩色图片都是 RGB 类型的但是在进行图像处理时需要用到灰度图、二值图、HSV、HSI 等颜色制式OpenCV 提供了cvtColor()函数来实现这些功能。这个函数用来进行颜色空间的转换随着 OpenCV 版本的升级对于颜色空间种类的支持也越来越多因此涉及不同颜色空间之间的转换比如 RGB 和灰度的互转、RGB 和 HSV六角锥体模型这个模型中颜色的参数分别是色调 H、饱和度 S、明度 V的互转等。cvtColor 函数声明如下voidcvtColor(InputArray src,OutputArray dst,intcode,intdstCn0);其中参数 src 用于输入图像即要进行颜色空间变换的原图像可以是 Mat 类OutputArray dst用于输出图像即进行颜色空间变换后存储的图像也可以是 Mat 类code 表示转换的代码或标识即在此确定将什么制式的图片转换成什么制式的图片dstCn 表示目标图像通道数默认取值为 0如果取值为 0就由 src 和 code 决定。InputArray 和 OutputArray 都是接口类它们可以是 Mat、Mat_、Mat_T, m, n、vector、vectorvector和 vector。函数 cvtColor 的作用是将一个图像从一个颜色空间转换到另一个颜色空间但是从 RGB 向其他类型转换时必须明确指出图像的颜色通道。值得注意的是在 OpenCV 中其默认的颜色制式排列是 BGR 而非 RGB。所以对于 24 位颜色图像来说前 8 位是蓝色中间 8 位是绿色最后8 位是红色。需要注意的是cvtColor()函数不能直接将 RGB 图像转换为二值图像需要借助 threshold 函数。我们常用的颜色空间转换有两种BGR 转为 Gray 和 BGR 转为 HSV。下面来看一个例子将图像转换为灰度图和 HSV。#includeiostream#includeopencv2\imgproc\types_c.h//for CV_RGB2GRAY#includeopencv2/core.hpp#includeopencv2/highgui.hpp#includeopencv2/imgproc.hpp#pragmacomment(lib,opencv_world4140d.lib)//引用引入库usingnamespacestd;usingnamespacecv;intmain(){Mat srcImageimread(1.jpg);//判断图像是否加载成功if(!srcImage.data){cout图像加载失败!endl;returnfalse;}elsecout图像加载成功!endlendl;//显示原图像namedWindow(原图像,WINDOW_AUTOSIZE);imshow(原图像,srcImage);//将图像转换为灰度图采用 CV_前缀Mat grayImage;cvtColor(srcImage,grayImage,CV_RGB2GRAY);//将图像转换为灰度图namedWindow(灰度图,WINDOW_AUTOSIZE);imshow(灰度图,grayImage);//将图像转换为 HSV采用 COLOR_前缀Mat HSVImage;cvtColor(srcImage,HSVImage,COLOR_BGR2HSV);//将图像转换为 HSV 图namedWindow(HSV,WINDOW_AUTOSIZE);imshow(HSV,HSVImage);waitKey(0);return0;}2.CV_BGR2GRAY 和CV_RGB2GRAY 用法区别在 OpenCV 中CV_BGR2GRAY 和 CV_RGB2GRAY 的选择非常简单它取决于你手中的图像数据其通道顺序是 BGR 还是 RGB。简单来说绝大多数 OpenCV 函数如 imread 读取的彩色图默认是 BGR 格式此时应使用 CV_BGR2GRAY。要理解原因我们需要看看它们内部的计算方式以及你的数据是以什么顺序存储的。1工作方式这两种转换最终都将彩色图片转为灰度图但内部处理逻辑是不同的这源于OpenCV对通道顺序的定义。CV_BGR2GRAY它“认为”输入图像的数据是按B(蓝)、G(绿)、R(红) 的顺序存储的。转换时它会按照这个顺序去提取三个通道的值并用一个固定的亮度公式Gray 0.114B 0.587G 0.299*R来计算灰度值。其中绿色分量对亮度的贡献最大这与人的视觉感知相符。CV_RGB2GRAY它则“认为”输入图像的数据是按R(红)、G(绿)、B(蓝) 的顺序存储的。它的计算过程也是去提取“它以为的”R、G、B通道然后套用同一个公式Gray 0.114R 0.587G 0.299*B。2什么时候用哪个选择哪个关键看数据源完全取决于你代码中 src 这个图像的实际通道存储顺序。使用 CV_BGR2GRAY这是最常见的情况。来源用 cv::imread() 不加参数地读取一张彩色图片时OpenCV 默认就会把数据解码成 BGR 顺序存储。一个常见的误区是误以为图片是RGB但其实OpenCV内部处理的通道顺序就是BGR。其他函数很多 OpenCV 的图像处理函数其输出的彩色图像也是 BGR 顺序。使用 CV_RGB2GRAY这种情况比较少见主要发生在你的图像数据来源不是OpenCV标准函数时。来源例如你使用了其他图像库如 Qt 的 QImage或者直接从摄像头原始数据中获取了 RGB 格式的像素数据。在这些情况下你需要确认你的数据确实是按 R, G, B 的顺序存储的。如果选错了会怎样如果你拿一个 BGR 顺序的图片却用了 CV_RGB2GRAYOpenCV 会“误以为”第一个通道是R第二个是G第三个是B。这样一来转换时它会错误地将原本的蓝色和红色通道数据混淆导致最终生成的灰度图像颜色层次错误与正常预期不符。这里有一个相关的接口cv::cvtColor(src, dst, cv::COLOR_BGR2GRAY);。在现代OpenCV版本中CV_前缀的枚举值已逐渐被COLOR_前缀取代但功能完全一致。

相关新闻

基于压电传感器的智能家居触摸交互系统设计与实现

基于压电传感器的智能家居触摸交互系统设计与实现

1. 项目概述:用“触摸”点亮智能家居的另一种可能 如果你玩过Arduino,大概率做过用按钮控制LED灯,或者用红外遥控器开关风扇的项目。这些方案很经典,但总感觉少了点“未来感”和“无感交互”的优雅。今天我想分享一个有点不一样的…

2026/8/21 10:47:12 阅读更多 →
基于ESP8266与传感器的自动灯光控制器:从原理到DIY实践

基于ESP8266与传感器的自动灯光控制器:从原理到DIY实践

1. 项目概述:让灯光“活”起来你有没有过这样的经历?晚上回家,手里提着大包小包,还得在黑暗中摸索墙壁上的开关;或者早上出门匆忙,走到楼下才想起客厅的灯好像没关;又或者,家里的老人…

2026/8/22 13:33:58 阅读更多 →
技术面试全攻略:算法、系统设计与实战技巧

技术面试全攻略:算法、系统设计与实战技巧

1. 面试准备的核心逻辑面试本质上是一场精心设计的压力测试,考察的是候选人在有限时间内展现综合能力的过程。我见过太多技术实力不错的候选人,因为缺乏系统化的面试准备而错失机会。真正有效的面试准备应该像编写高性能代码一样,需要明确的需…

2026/8/21 6:41:09 阅读更多 →

最新新闻

【Docker项目实战】Docker环境下部署immich照片管理系统

【Docker项目实战】Docker环境下部署immich照片管理系统

【Docker项目实战】Docker环境下部署immich照片管理系统一、immich介绍1.1 immich简介1.2 immich注意事项1.3 immich使用场景二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下载i…

2026/8/22 16:11:31 阅读更多 →
Go微服务链路追踪从Jaeger到OpenTelemetry的完整实践

Go微服务链路追踪从Jaeger到OpenTelemetry的完整实践

Go微服务链路追踪Jaeger-OpenTelemetry集成实战 文章导语 在微服务架构中,一个用户请求可能经过10个服务。当出现延迟或错误时,如何快速定位问题?分布式链路追踪就是为此而生。本文基于Jaeger和OpenTelemetry,在Go微服务中实现完整…

2026/8/22 16:11:31 阅读更多 →
前端js2

前端js2

值传递和引用传递值传递是传递变量的值,并不会改变方法外变量的值;引用传递是传递对象的地址,会改变对象本身的值;值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应…

2026/8/22 16:11:31 阅读更多 →
Go微服务网关设计与实现从路由转发到限流熔断

Go微服务网关设计与实现从路由转发到限流熔断

Go微服务网关设计与实现从路由转发到限流熔断 文章导语 API网关是微服务架构的入口,承担着路由转发、认证鉴权、限流熔断、日志监控等职责。本文基于Go构建一个轻量级API网关,覆盖核心功能的实现。 一、反向代理核心 func NewGateway(config GatewayConf…

2026/8/22 16:11:31 阅读更多 →
Go微服务配置中心实现从静态配置到动态热更新

Go微服务配置中心实现从静态配置到动态热更新

Go微服务配置中心实现从静态配置到动态热更新 文章导语 配置管理是微服务治理的核心环节。硬编码配置→配置文件→环境变量→配置中心,是技术演进的必经之路。本文基于ViperNacos,实现Go微服务的动态配置管理。 一、Viper配置管理 func InitConfig() *vi…

2026/8/22 16:11:30 阅读更多 →
ol-ext 上手实操手册:OpenLayers 地图扩展库核心能力拆解

ol-ext 上手实操手册:OpenLayers 地图扩展库核心能力拆解

ol-ext 上手实操手册:OpenLayers 地图扩展库核心能力拆解 【免费下载链接】ol-ext Cool extensions for Openlayers (ol) - animated clusters, CSS popup, Font Awesome symbol renderer, charts for statistical map (pie/bar), layer switcher, wikipedia layer,…

2026/8/22 16:10:30 阅读更多 →

日新闻

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

在电子硬件开发领域,PCB(印制电路板)的沉金工艺是提升产品可靠性和焊接质量的关键环节。对于需要高密度互连、长期稳定运行或高频信号传输的板卡,如“黍姐仿通行证”这类可能涉及身份识别、数据交互的硬件项目,选择正确…

2026/8/22 0:00:11 阅读更多 →
电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

这次我们来看一个针对电气考研电路科目的学习规划项目。它不是软件工具,而是一套聚焦于8月份关键节点的备考策略。对于电气工程考研的同学来说,电路分析是专业课的重中之重,也是拉开分差的关键。进入8月,复习进入强化阶段&#xf…

2026/8/22 0:00:11 阅读更多 →
消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

大家好,我是专注于前端开发与AI工具实践的技术博主。在日常使用 Claude Code 等AI编程助手时,你是否也遇到过这样的困扰:生成的代码功能上没问题,但代码风格、组件设计、交互逻辑总透着一股“AI味”——布局单调、样式简陋、交互生…

2026/8/22 0:00:11 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/22 8:09:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/21 16:42:28 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/22 7:31:03 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →