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

OpenCV颜色变换cvtColor

OpenCV计算机视觉开发实践:基于Qt C++ - 商品搜索 - 京东

颜色变换是imgproc模块中一个常用的功能。我们生活中看到的大多数彩色图片都是RGB类型的,但是在进行图像处理时需要用到灰度图、二值图、HSV(六角锥体模型,这个模型中颜色的参数分别是色调H、饱和度S、明度V)、HSI等颜色制式,对此OpenCV提供了cvtColor()函数来实现这些功能,这个函数用来进行颜色空间的转换。随着OpenCV版本的升级,对于颜色空间种类的支持也越来越多,因此涉及不同颜色空间之间的转换,比如RGB和灰度的互转、RGB和HSV的互转等。

cvtColor函数声明如下:

void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 );

参数说明如下:

  • src:用于输入图像,即要进行颜色空间变换的原图像,可以是Mat类。
  • OutputArray dst:用于输出图像,即进行颜色空间变换后存储的图像,也可以是Mat类。
  • code:表示转换的代码或标识,即在此确定将什么制式的图片转换成什么制式的图片。
  • dstCn:表示目标图像通道数,默认取值为0,如果取值为0,就由src和code决定。
  • InputArray和OutputArray:都是接口类,它们可以是Mat、Mat_<T>、Mat_<T, m, n>、vector<T>、vector<vector<T>>和vector<Mat>。

函数cvtColor的作用是将一个图像从一个颜色空间转换到另一个颜色空间,但是当从RGB向其他类型转换时,必须明确指出图像的颜色通道。值得注意的是,在OpenCV中,默认的颜色制式排列是BGR而非RGB。因此,对于24位颜色图像来说,前8位是蓝色,中间8位是绿色,最后8位是红色。

需要注意的是,cvtColor()函数不能直接将RGB图像转换为二值图像,需要借助threshold函数。

我们常用的颜色空间转换有两种:BGR转为灰度图和BGR转为HSV。下面来看一个例子,将图像转换为灰度图和HSV。

【例4.1】将图像转换为灰度图和HSV

   打开Qt Creator,新建一个控制台工程,工程名是test。

   在IDE中打开main.cpp,输入如下代码:

#include <QDebug>
#include <opencv2/imgproc/types_c.h> // for CV_RGB2GRAY
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
using namespace cv;int main()
{Mat srcImage = imread("sky.jpg");// 判断图像是否加载成功if (!srcImage.data){qDebug() << "图像加载失败!";return false;}elseqDebug()<< "图像加载成功!";// 显示原图像namedWindow("src", WINDOW_AUTOSIZE);imshow("src", srcImage);// 将图像转换为灰度图,采用CV_前缀Mat grayImage;cvtColor(srcImage, grayImage, CV_RGB2GRAY);     // 将图像转换为灰度图namedWindow("gray", WINDOW_AUTOSIZE);imshow("gray", grayImage);// 将图像转换为HSV,采用COLOR_前缀Mat HSVImage;cvtColor(srcImage, HSVImage, COLOR_BGR2HSV);    // 将图像转换为HSVnamedWindow("HSV", WINDOW_AUTOSIZE);imshow("HSV", HSVImage);waitKey(0);return 0;
}

保存工程并运行,结果如图4-1所示。

图4-1

http://www.xdnf.cn/news/3241.html

相关文章:

  • UE中通过AAIController::MoveTo函数巡逻至目标点后没法正常更新巡逻目标点
  • 力扣349 == 两个数组交集的两种解法
  • selenium 实现模拟登录中的滑块验证功能
  • 【文献笔记】LLM-based control code generation using image recognition
  • 详细讲解一下Java中的Enum
  • Missashe考研日记-day22
  • AI与物联网的深度融合:开启智能生活新时代
  • 写书的三驾马车
  • 【Unity】UI点击事件处理器
  • 文件系统 软硬连接
  • 类和对象(下篇)(详解)
  • 2025.4.20机器学习笔记:文献阅读
  • 【前端】跟着maxkb学习流程图画法
  • Qt QML实现Windows桌面歌词动态播放效果
  • Win10如何一键切换IP地址教程
  • ubtuntu安装docker拉取iwebsec镜像
  • 关于STM32G030和G070未初始化看门狗,程序里面喂狗会导致擦除Flash失败或进入‘HardFault_Handler’
  • WebSocket 实现数据实时推送原理
  • GPT,Bert类模型对比
  • 4.17---实现商铺和缓存与数据库双写一致以及宕机处理
  • 2025.04.17【Dendrogram】生信数据可视化:Dendrogram图表详解
  • 网络编程 - 1
  • Genspark:重新定义AI搜索与代理的全能型工具
  • 私人笔记:动手学大模型应用开发llm-universe项目环境创建
  • 【前端vue生成二维码和条形码——MQ】
  • 【随身WIFI】随身WiFi Debian系统优化教程
  • AUTOSAR图解==>AUTOSAR_SWS_DefaultErrorTracer
  • 计算机网络 - UDP协议
  • 4.15BUUCTF Ez_bypass,HardSQL,AreUSerialz,BabyUpload,CheckIn
  • 【Docker】运行错误提示 unknown shorthand flag: ‘d‘ in -d ----详细解决方法