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

OpenCV颜色空间转换(1)颜色空间转换函数cvtColor()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

将图像从一个颜色空间转换到另一个颜色空间。

此函数将输入图像从一个颜色空间转换到另一个颜色空间。在进行 RGB 颜色空间之间的转换时,应显式指定通道的顺序(RGB 或 BGR)。请注意,在 OpenCV 中,默认的颜色格式通常称为 RGB,但实际上它是 BGR(字节顺序相反)。因此,在标准(24 位)彩色图像中,第一个字节将是 8 位的蓝色组件,第二个字节将是绿色,第三个字节将是红色。第四、第五和第六个字节将是第二个像素(首先是蓝色,然后是绿色,最后是红色),依此类推。

R、G 和 B 通道值的传统范围是:

  • 0 到 255 对于 CV_8U 图像
  • 0 到 65535 对于 CV_16U 图像
  • 0 到 1 对于 CV_32F 图像

在线性变换的情况下,范围无关紧要。但在非线性变换的情况下,输入的 RGB 图像应被归一化到适当的值范围以获得正确的结果,例如,在进行 RGB → Luv* 转换时。例如,如果您有一个直接从 8 位图像转换而来的 32 位浮点图像,并且没有任何缩放,则其值范围将是 0…255 而不是函数假定的 0…1。因此,在调用 cvtColor 之前,您需要先将图像缩小:

img *= 1./255;
cvtColor(img, img, COLOR_BGR2Luv);

如果您使用 cvtColor 函数处理 8 位图像,转换过程中会损失一些信息。对于许多应用而言,这种损失可能不会被注意到,但在需要全色彩范围的应用中或在执行某个操作前后需要转换图像的应用中,建议使用 32 位图像。

如果转换增加了 alpha 通道,其值将被设置为对应通道范围的最大值:对于 CV_8U 为 255,对于 CV_16U 为 65535,对于 CV_32F 为 1。

函数原型


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

参数

  • 参数src i输入图像:8 位无符号、16 位无符号(CV_16UC…)或单精度浮点。
  • 参数dst 输出图像,大小和深度与 src 相同。
  • 参数code 颜色空间转换代码(参见 ColorConversionCodes)。
  • 参数dstCn 目标图像中的通道数。如果该参数为 0,则通道数会根据 src 和 code 自动推断。

代码示例

#include <opencv2/opencv.hpp>
#include <iostream>int main(int argc, char** argv)
{// 加载一个图像文件,如果未提供,则使用默认的图像cv::Mat image = cv::imread("/media/dingxin/data/study/OpenCV/sources/images/qiu.jpg");if (image.empty()){std::cerr << "Error: Image cannot be loaded!" << std::endl;return -1;}// 创建一个窗口来显示原始图像cv::namedWindow("Original Image", cv::WINDOW_AUTOSIZE);cv::imshow("Original Image", image);// 将图像从 BGR 转换为灰度cv::Mat grayImage;cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY);// 创建一个窗口来显示灰度图像cv::namedWindow("Grayscale Image", cv::WINDOW_AUTOSIZE);cv::imshow("Grayscale Image", grayImage);// 等待用户按键后退出cv::waitKey(0);return 0;
}

运行结果

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 单元测试 Mock不Mock?
  • P7072 [CSP-J2020] 直播获奖
  • 解决Metasploit调用Nessus报错问题
  • Kafka【十三】消费者消费消息的偏移量
  • 使用LLaMA-Factory快速训练自己的专用大模型
  • 在 Windows 环境下实现免密登录 Linux 服务器
  • Spring之Bean的生命周期 2024-9-6 19:47
  • 水晶连连看 - 无限版软件操作说明书
  • 分布式光伏的优势
  • 深度学习从入门到精通——yolov3算法介绍
  • K8s中pod控制器
  • vscode debug
  • MySQL数据库的介绍
  • yarn create vite时报错error Error: EPERM: operation not permitted, mkdir
  • STM32+ESP8266+MQTT协议连接阿里云实现温湿度上传
  • 「译」Node.js Streams 基础
  • 2017届校招提前批面试回顾
  • 4个实用的微服务测试策略
  • github从入门到放弃(1)
  • JAVA SE 6 GC调优笔记
  • Java读取Properties文件的六种方法
  • js操作时间(持续更新)
  • linux学习笔记
  • React-redux的原理以及使用
  • RxJS: 简单入门
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Vim Clutch | 面向脚踏板编程……
  • vuex 笔记整理
  • 测试开发系类之接口自动化测试
  • 计算机常识 - 收藏集 - 掘金
  • 解析带emoji和链接的聊天系统消息
  • 来,膜拜下android roadmap,强大的执行力
  • 马上搞懂 GeoJSON
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何利用MongoDB打造TOP榜小程序
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 使用 Docker 部署 Spring Boot项目
  • 数据结构java版之冒泡排序及优化
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • $jQuery 重写Alert样式方法
  • (3)选择元素——(17)练习(Exercises)
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (SERIES12)DM性能优化
  • (第二周)效能测试
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (收藏)Git和Repo扫盲——如何取得Android源代码