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;
}

运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/53232.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎样查看电脑文件夹大小?文件夹数据丢失怎么找回

在日常使用电脑的过程中&#xff0c;‌我们经常需要查看文件夹的大小&#xff0c;‌以便更好地管理磁盘空间。‌然而&#xff0c;‌有时我们可能会遇到文件夹数据丢失的问题&#xff0c;‌这可能是由于误删除、‌系统错误或病毒感染等多种原因造成的。‌本文旨在介绍如何查看电…

【苍穹外卖】Day 7 地址簿、下单、定时处理

1 地址簿模块 地址簿实体对象&#xff1a; package com.sky.entity;import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor;import java.io.Serializable;/*** 地址簿*/ Data Builder NoArgsConstructor AllArgsCon…

001集——CAD—C#二次开发入门——开发环境基本设置

CAD C#二次开发首先需要搭建一个舒服的开发环境&#xff0c;软件安装后&#xff0c;需要修改相关设置。本文为保姆级入门搭建开发环境教程&#xff0c;默认已成功安装vs和cad 。 第一步&#xff1a;创建类库 第二步&#xff1a;进行相关设置&#xff0c;如图&#xff1a; 下一…

JavaEE:多线程进阶(CAS)

文章目录 CAS什么是 CASCAS 伪代码 CAS有哪些应用CAS的ABA问题什么是ABA问题ABA问题带来的BUG解决方案 CAS 什么是 CAS CAS: 全称Compare and swap&#xff0c;字面意思:”比较并交换“&#xff0c;一个 CAS 涉及到以下操作: 我们假设内存中的原数据V&#xff0c;旧的预期值A…

刷题记录(2)

1. HWOD机试 - 模拟消息队列(100) package com.yue.test;import org.junit.Test;import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List;/*** Author: 夜雨* Date: 2021-12-08-10:31* Description:* Version 1.0*/ public…

【Android】ViewPager基本用法总结

文章目录 一、添加ViewPager控件二、构建适配器类三、在 MainActivity 中设置适配器示例一&#xff1a;图片切换适配器MainActivity 示例二&#xff1a;Fragment切换适配器FragmentMainActivity ViewPager 是 Android 中一个用于在同一屏幕上滑动不同页面&#xff08;通常是左右…

OBS怎么设置录制配置?3个电脑录屏小技巧妥妥教会你

OBS Studio是一款广受好评的开源录屏和直播软件&#xff0c;它以其强大的功能和用户友好的操作界面而闻名。对于初次接触OBS的用户来说&#xff0c;可能会对软件的众多按钮感到困惑。本文将为你提供一份简洁明了的OBS录屏指南&#xff0c;帮助你快速上手。 演示机型&#xff1a…

Hive数据库与表操作全指南

目录 Hive数据库操作详解 创建数据库 1&#xff09;语法 2&#xff09;案例 查询数据库 1&#xff09;展示所有数据库 &#xff08;1&#xff09;语法 &#xff08;2&#xff09;案例 2&#xff09;查看数据库信息 &#xff08;1&#xff09;语法 &#xff08;2&#…

Simulink:循环计数器 Counter Free-Running

原文&#xff1a;Matlab生成stm32代码_matlab stm32-CSDN博客 使用“Counter Free-Running”模块进行计数&#xff0c;参数配置如下 此配置的意思为每0.5秒计数一次&#xff0c;计数的最大值为2^Nbits – 1&#xff0c;其中Nbits为所填的2&#xff0c;所以这里最大值为3。 示波…

【多线程】死锁

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 死锁的三种情况1.1 一个线程一把锁&#xff08;同一个线程给同一个对象加两次锁的情况&#xff09;1.2 两…

彻底解决 node/npm, Electron下载失败相关问题, 从底层源码详解node electron 加速配置

最近玩了一下electron项目, 总是会遇到electron的下载失败问题, 于是看了一下node源码, 做一个记录. node/npm 加速配置 这个配置通过设置node配置里面的registry 这个配置项来完成加速. 配置方法 npm config set registry https://registry.npmmirror.com上面的命令就是将当…

【全网最全】2024年数学建模国赛C题超详细保奖思路+可视化图表+成品论文+matlab/python代码等(后续会更新

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片&#xff0c;那是获取资料的入口&#xff01; 基于优化模型的农作物的种植策略 摘要 随着农业生产向集约化和智能化方向发展&#xff0c;优化种植策略以最大化经济收益成为当前农业研究中的重要问题。本…

车载测试协议:ISO-14229、ISO-15765、ISO-11898、ISO-26262【车企项目实操学习】②

FOTA模块中OTA的知识点&#xff1a;1.测试过程中发现哪几类问题&#xff1f; 可能就是一个单键的ecu&#xff0c;比如升了一个门的ecu&#xff0c;他的升了之后就关不上&#xff0c;还有就是升级组合ecu的时候&#xff0c;c屏上不显示进度条。 2.在做ota测试的过程中&#xff…

已入职华为!!关于我成功拿下华为大模型算法岗经验总结

方向:大模型算法工程师 整个面试持续了1小时10分钟&#xff0c;能够看出面试官是典型搞技术的&#xff0c;问的很专业又很细&#xff0c;全程感觉压力好大&#xff0c;面完后感觉丝丝凉意&#xff0c;不过幸好还是成功拿下了Offer 一面: 自我介绍 简历项目深度交流 1.项目的背…

Java笔试面试题AI答之JDBC(2)

文章目录 7. 列出Java应该遵循的JDBC最佳实践&#xff1f;8. Statement与PreparedStatement的区别,什么是SQL注入&#xff0c;如何防止SQL注入Statement与PreparedStatement的区别什么是SQL注入如何防止SQL注入 9. JDBC如何连接数据库&#xff1f;1. 加载JDBC驱动程序2. 建立数…

[网络原理]关于网络的基本概念 及 协议

文章目录 一. 关于网络的概念介绍1. 局域⽹LAN2. ⼴域⽹WAN3. 主机4. 路由器5. 交换机IP地址端口号 二. 协议协议分层TCP/IP五层模型(或四层)OSI七层模型封装分用 一. 关于网络的概念介绍 1. 局域⽹LAN 局域⽹&#xff0c;即 Local Area Network&#xff0c;简称LAN。 Local …

二叉树的层次遍历(10道)

&#xff08;写给未来遗忘的自己&#xff09; 102.二叉数的层序遍历&#xff08;从上到下&#xff09; 题目&#xff1a; 代码&#xff1a; class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> r…

JVM系列(十) -垃圾收集器介绍

一、摘要 在之前的几篇文章中,我们介绍了 JVM 内部布局、对象的创建过程、运行期的相关优化手段以及垃圾对象的回收算法等相关知识。 今天通过这篇文章,结合之前的知识,我们一起来了解一下 JVM 中的垃圾收集器。 二、垃圾收集器 如果说收集算法是内存回收的方法论,那么…

稀土废水回收硫酸铵树脂技术

稀土废水回收硫酸铵的过程主要涉及到化学沉淀法、离子交换法和蒸发结晶法等技术。这些方法可以有效地从稀土废水中回收硫酸铵&#xff0c;同时降低废水中的氨氮含量&#xff0c;实现资源的循环利用。以下是具体的技术介绍&#xff1a; 稀土废水回收硫酸铵的技术 ● 化学沉淀…

【MATLAB】矩阵的合并

矩阵的合并是指将两个或者多个矩阵合并到一起构成一个新的矩阵。矩阵标识符方括号 [ ]&#xff0c;不仅可以用来创建新的矩阵&#xff0c;还可以用来将若干个矩阵合并到一起。表达式 C [A B] 将矩阵A和B在水平方向上合并到一起&#xff0c;而表达式C[A;B]则将矩阵A和B在竖直方…