OpenCV之cvtColor颜色空间转换

news2025/1/10 16:01:19

        大多数彩色图片都是RGB类型,但是在进行图像处理时,需要用到灰度图、二值图、HSV、HSI等颜色制式,opencv提供了cvtColor()函数来实现这些功能。首先看一下cvtColor函数定义:

 C++: void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 );
  • 参数解释: 

. InputArray src: 输入图像即要进行颜色空间变换的原图像,可以是Mat类 ;
. OutputArray dst: 输出图像即进行颜色空间变换后存储图像,也可以Mat类 ;
. int code: 转换的代码或标识,即在此确定将什么制式的图片转换成什么制式的图片,后面会详细说明
. int dstCn = 0: 目标图像通道数,如果取值为0,则由src和code决定;

        函数的作用是将一个图像从一个颜色空间转换到另一个颜色空间,但是从RGB向其他类型转换时,必须明确指出图像的颜色通道,前面我们也提到过,在opencv中,其默认的颜色制式排列是BGR而非RGB。所以对于24位颜色图像来说,前8-bit是蓝色,中间8-bit是绿色,最后8-bit是红色。常见的R,G,B通道的取值范围为: 
. 0-255 :CV_8U类型图片 
. 0-65535: CV_16U类型图片 
. 0-1: CV_32F类型图片 

        对于线性变换来说,这些取值范围是无关紧要的。但是对于非线性转换,输入的RGB图像必须归一化到其对应的取值范围来或得最终正确的转换结果,例如从RGB->L*u*v转换。如果从一个8-bit类型图像不经过任何缩放(scaling)直接转换为32-bit浮点型图像,函数将会以0-255的取值范围来取代0-1的取值范围,所以在使用cvtColor函数之前需要对图像进行缩放如下:

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

        如果对8-bit图像使用cvtColor()函数进行转换将会由一些信息丢失。函数可以做下面类型的转换,需要说明的是在opencv2.x时颜色空间转换code用的宏定义是CV_前缀开头,而在opencv3.x版本其颜色空间转换code宏定义更改为COLOR_开头,而经验证,2.4.13版本中opencv同事支持这两种形式的写法。故下面表格会将两种code类型同时列出,以供参考:

        需要注意的是cvtColor()函数不能直接将RGB图像转换为二值图像(Binary Image),需要借助threshold()函数,其具体用法请查阅threshold().

实例:

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
using namespace std;
using namespace cv;
int main()
{
    Mat srcImage = imread("星空.png");
    //判断图像是否加载成功
    if(!srcImage.data)
    {
        cout << "图像加载失败!" << endl;
        return false;
    }
    else
    cout << "图像加载成功!" << endl << endl;
    //显示原图像
    namedWindow("原图像",WINDOW_AUTOSIZE);
    imshow("原图像",srcImage);

    //将图像转换为灰度图,采用CV_前缀
    Mat grayImage;
    cvtColor(srcImage, grayImage, CV_BGR2GRAY);     
    //将图像转换为灰度图
    namedWindow("灰度图",WINDOW_AUTOSIZE);
    imshow("灰度图",grayImage);
    //将图像转换为HSV,采用COLOR_前缀
    Mat HSVImage;
    cvtColor(srcImage, HSVImage, COLOR_BGR2HSV);    //将图像转换为HSV图        
    namedWindow("HSV",WINDOW_AUTOSIZE);
    imshow("HSV",HSVImage);waitKey(0);
    return 0;
}

原图:

灰度图:

 

HSV:

 

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

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

相关文章

cloudflare配置防火墙WAF阻止或允许特定国家或地区访问

当 cloudflare 域名需要阻止或允许特定国家或地区访问时&#xff0c;可以在cloudflare的 WAF 里配置&#xff0c;官网也有 配置指南 说明&#xff0c;点击直达。 以下是仅允许中国区访问的配置&#xff1a; 安全性 --> WAF --> 创建规则&#xff0c;输入要创建规则的名称…

正态分布的推导笔记

本篇文章来源于知乎上一篇关于正态分布推导的文章&#xff0c;醍醐灌顶&#xff0c;因此记录下笔记 from Introduction To The Normal Distribution (Bell Curve), BySaul Mcleod, PhD, https://www.simplypsychology.org/normal-distribution.html 假设有误差概率密度函数 f …

VMwave虚拟机配置和外网联通

还原默认设置之后&#xff0c;参考 VMwave 虚拟机的三种上网方式_51CTO博客_虚拟机网络设置的三种 设置桥接模式 &#xff0c;配置虚拟机为静态IP&#xff08;网段和主机相通&#xff09;。

利用prctl 函数给线程命名

头文件&#xff1a; #include <sys/prctl.h> 函数原型&#xff1a; extern int prctl (int __option, ...) 作用&#xff1a; 这个函数是为系统量身定做的&#xff0c;它的功能取决于第一个参数 option &#xff1b; 参数含义&#xff1a; option:功能选项 arg2~ar…

动画制作如何选择动作捕捉动画制作服务

近日&#xff0c;长宁ART PARK 大融城迎来了首位虚拟代言人“光艺”&#xff0c;拥有着极具感染力的笑容、数字人形象辨识度极高&#xff0c;在裸眼3D巨屏中&#xff0c;为市民带来虚实交互体验。而这种数字人动画的背后&#xff0c;大多以动作捕捉动画制作技术为主。 *素材源于…

opengl下的视锥体剔除和凸多边形剔除

预备知识 法线方程表达式的一般形式为Ax+By+Cz+D=0,其中(A,B,C)是平面的法向量,D是平面的截距。 平面上一点为P(x0,y0,z0),则点P到平面的距离为:d = |Ax0+By0+Cz0+D| / √(A+B+C) (因为法向量没有归一化,所以得到法向量上的投影要除以法向量长度) 假设n是归一化后的法向…

企业架构LNMP学习笔记50

aof默认是不开的。备份频率是更高的。 aof备份的频率&#xff1a; appendfsync always&#xff1a; 每次收到写命令就立即强制写入磁盘&#xff0c;最慢的&#xff0c;但是保证完全持久化&#xff0c;不推荐使用。 appendfsync everysec&#xff1a; 每秒强制写入磁盘一次&a…

IPO解读丨转向国内帐篷市场,泰鹏智能能否抓住露营经济的红利?

IPO节奏阶段性放缓之际&#xff0c;北交所近日迎来了一家新上市企业。 北交所审议结果显示&#xff0c;山东泰鹏智能家居股份有限公司&#xff08;简称为“泰鹏智能”&#xff09;符合发行条件、上市条件和信息披露要求&#xff0c;成功过会&#xff0c;进入发行准备阶段。 据…

【力扣每日一题】2023.9.10 打家劫舍Ⅳ

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目翻译有些烂&#xff0c;我来二次翻译一下&#xff0c;找出数组中k个两两互不相邻的数&#xff0c;求出它们的最大值。要求最大值尽可…

功能定义-变道碰撞预警

功能概述 变道碰撞预警(Lane Change Warning)功能包括两个子功能&#xff1a; ——盲区监测(Blind Spot Detection)&#xff0c;其功能表现为实时监测驾驶员视野盲区&#xff0c;并在其盲区内出现其他道路使用者时发出提示或警示信息 ——接近车辆报警(Closing Vehicle Warnin…

字符串函数和内存函数详解(1)

&#x1f435;本文将通过函数原型、用法、模拟实现等多个方面全面讲解字符串的库函数 1.strlen&#x1f4da; 1.1函数用法&#x1f4d7; strlen函数用来计算字符串的长度&#xff0c;它会从接收到字符的地址开始读取直到遇到\0&#xff0c;每读取一个非\0的字符长度1&#xff…

荣膺ODCC 三项大奖!记忆科技旗下忆联再获行业认可

9月13—14日&#xff0c;由开放数据中心委员会&#xff08;ODCC&#xff09;举办的“2023 ODCC开放数据中心大会” 在北京举办。忆联母公司记忆科技作为国内领先IT硬件厂商受邀参会&#xff0c;以一站式成果为在场嘉宾带来一场科技盛宴。在本次大会中&#xff0c;忆联凭借极具竞…

华为MTL流程的六个模块初步解析

大家好&#xff01; 昨天华研荟给大家介绍了华为MTL流程的基本概念和发展历程&#xff0c;今天我们来了解下华为MTL流程的六个模块。 如昨天所述&#xff0c;华为的MLT流程主要有六个模块&#xff1a;市场洞察、市场管理、联合创新、销售赋能、激发需求、营销质量管理。 接下…

Spring 工厂

目录 一、Spring 工厂创建复杂对象 1、什么是复杂对象 2、 Spring 工厂创建复杂对象的 3 种方式 &#xff08;1&#xff09;FactoryBean 接口 开发步骤&#xff1a; 细节&#xff1a; FactoryBean 的实现原理[简易版] Factory Bean 总结 &#xff08;2&#xff09;实例…

IGEV深度估计测试代码

生成点云的测试脚本&#xff1a; import sys sys.path.append(core) DEVICE cuda import osos.environ[CUDA_VISIBLE_DEVICES] 0 import argparse import glob import numpy as np import torch from tqdm import tqdm from pathlib import Path from igev_stereo import IG…

2020-2023小样本学习(FSL)顶会论文及开源代码合集(已分类整理)

这次分享的是近四年&#xff08;2020-2023&#xff09;各大顶会中的小样本学习&#xff08;FSL&#xff09;论文&#xff0c;有160篇&#xff0c;涵盖了FSL三大类方法&#xff1a;数据、模型、算法&#xff0c;以及FSL的应用、技术、理论等领域。 由于论文数量太多&#xff0c…

【文末赠书】SRE求职必会 —— 可观测性平台可观测性工程(Observability Engineering)

文章目录 〇、导读一、实现可观测性平台的技术要点是什么&#xff1f;二、兼容全域信号量三、所谓全域信号量有哪些&#xff1f;四、统一采集和上传工具五、统一的存储后台六、自由探索和综合使用数据七、总结★推荐阅读《可观测性工程》直播预告直播主题直播时间预约直播 视频…

福建厦门航空飞机发动机零部件检测3D测量尺寸偏差比对-CASAIM中科广电

航空航天是一个创新型发展国家的尖端命脉&#xff0c;代表着一个国家科学技术的先进水平。在航空航天工业的发展和组成领域中&#xff0c;对于在制造业中的航空航天产品零部件精度要求十分严苛&#xff0c;从前期的设计、中期建造、后期维修检测&#xff0c;任何一个环节、任何…

vue一直自动换行问题解决

html换行主要是由于< div >标签引起的&#xff0c;而vue的一些前端组件本身就会自带< div >&#xff0c;比如el-input的标签拆分出来之后就形成了如下的内容 因此之前我采用 <el-form-item prop"code" v-if"captchaOnOff"><el-inpu…

【算法挨揍日记】day06——1004. 最大连续1的个数 III、1658. 将 x 减到 0 的最小操作数

1004. 最大连续1的个数 III 1004. 最大连续1的个数 III 题目描述&#xff1a; 给定一个二进制数组 nums 和一个整数 k&#xff0c;如果可以翻转最多 k 个 0 &#xff0c;则返回 数组中连续 1 的最大个数 。 解题思路&#xff1a; 首先题目要我们求出的最多翻转k个0后&#x…