一、颜色模型与转换

1.1RGB颜色模型

RGB颜色空间模型:

该模型的命名方式是采用三种颜色的英文首字母,分别是红色,绿色,和蓝色。在RGB模型中所有的颜色都是这三种颜色通过不同比例的混合模型,如果三种颜色都为零,则表示为黑色,如果三种颜色的分量相同且都为最大值,则表示为白色。在这个基础上增加第四个通道即为RGBA模型,第四个通道表示颜色的透明度,当没有透明度需求的时候,RGBA模型就会退化成RGB模型。

1.2YUV颜色模型

YUV模型是电视信号系统所采用的颜色编码方式。这三个变量分别表示像素的亮度(Y)、红色分量与亮度信号差值(U)、蓝色与亮度的差值(V)。这种颜色模型主要用于视频和图像的传输。RGB模型与YUV模型之间的转换关系如下:

1.3HSV颜色模型

HSV是一种将RGB色彩空间中的点在倒圆锥体中的表示方法。HSV即色相(Hue)、饱和度(Saturation)、明度(Value),又称HSB(B即Brightness)。色相是色彩的基本属性,就是平常说的颜色的名称,如红色、黄色等。饱和度(S)是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取0-100%的数值。明度(V),取0-max(计算机中HSV取值范围和存储的长度有关)。HSV颜色空间可以用一个圆锥空间模型来描述。圆锥的顶点处,V=0,H和S无定义,代表黑色。圆锥的顶面中心处V=max,S=0,H无定义,代表白色。

1.4Lab颜色模型

Lab颜色模型弥补来了RGB颜色模型的不足。是一种设备无关和基础与生理特征的颜色模型。在模型中, L表示亮度,a和b是两个颜色通道,两者的取值区间都是-128~127,其中a通道数值有小到打对应的颜色是从绿色变成红色,b通道数值由小到大对应的颜色是由蓝色变成黄色。

1.5GRAY颜色模型

GRAY模型并不是一个彩色模型,而是一个灰度图像,灰度图像具有相同尺寸相同亚索格式所占容量小,易于采集,便于传输等优点。常用RGB模型转化成灰度图像的方式:

GRAY = 0.3R+ 0.59G+ 0.11B

1.6不同颜色模型之间的互相转换

OpenCV提供了cvtColor()函数用于转化功能。

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

src: 待转换颜色模型的原始图像。

dst:转换颜色模型后的目标图像。

code:颜色空间转换的标志。

dstCn:目标图像中的通道数。

如果转换过程中添加了alpha通道(RGB模型中第四个通道,表示透明度),则其值将设置为相应通道范围的最大值:CV_8U为255,CV_16U为65535,CV_32F为1。

cvtColor()函数颜色模型转换常用标志参数
标志参数 简记 作用
COLOR_BGR2BGRA 0 对RGB图像添加alpha通道
COLOR_BGR2RGB 4 彩色图像通道颜色顺序的更改
COLOR_BGR2GRAY 10 彩色图像转化成灰度图像
COLOR_GRAY2BGR 8 灰度图像转化成彩色图像(伪彩色)
COLOR_BGR2YUV 82 RGB颜色模型转成YUV颜色模型
COLOR_YUV2BGR 84 YUV颜色模型转成RGB颜色模型
COLOR_BGR2HSV 40 RGB颜色模型转成HSV颜色模型
COLOR_HSV2BGR 54 HSV颜色模型转成RGB颜色模型
COLOR_BGR2Lab 44 BGR颜色模型转成Lab颜色模型
COLOR_Lab2BGR 56 Lab颜色模型转成RGB颜色模型

代码实例:


#include<opencv2/opencv.hpp>
#include<iostream>
#include<vector>using namespace std;
using namespace cv;int main()
{Mat img = imread("lena.png");if (img.empty()){cout << "请检查输入的图像数据是否正确" << endl;return -1;}Mat gray, HSV, YUV, Lab;cvtColor(img, HSV, COLOR_BGR2HSV);cvtColor(img, YUV, COLOR_BGR2YUV);cvtColor(img, Lab, COLOR_BGR2Lab);cvtColor(img, gray, COLOR_BGR2GRAY);imshow("原图", img);imshow("HSV", HSV);imshow("YUV", YUV);imshow("Lab", Lab);imshow("gray", gray);waitKey(0);return 0;
}

二、多通道分离函数与合并

2.1多通道分离函数split()

OpenCV中针对多通道分离函数split()有两种重载原型。

void cv::split(const Mat &src,Mat *mvbegin)
void cv::split(InputArray m,OutArray mv)

src:带分离的多通道图像。

mvbegin:分离后的单通道图像,为数组形式,数组大小需要与图像的通道数相同。

m:带分离的多通道图像。

mv:分离后的单通道图像,为向量(vector)形式。

虽然两个函数原型输入参数的类型不同,但通道分离的原理是相同的,可以用下式表示:

mv[c](I) = src(I)

2.2多通道合并函数merge()

OpenCV针对多通道分离合并函数merge()也有两种重载原型。

void cv::merge(const Mat &mv,size_t cout,OutputArray dst)
void cv::merge(InputArrayOfArrays mv,OutputArray dst)

mv(第一种重载原型参数) : 需要合并的图像数组,其中每个图像必须有相同的尺寸和数据类型。

cout:输入的图像数组的长度,其数值必须大于0。

mv(第二种重载原型参数):需要合并的图像向量(vector),其中每个图像必须拥有相同的尺寸和数据类型。

dst:合并后输出的图像,与mv[0]具有相同的尺寸和数据类型,通道数等于所有输入图像的通道数总和。

2.3图像多通道分离与合并例程

#include<opencv2/opencv.hpp>
#include<iostream>
#include<vector>using namespace std;
using namespace cv;int main()
{Mat img = imread("C:\\Users\\王淏\\Pictures\\f9afe18da2fb1fa2ff72c4d8b29fe6a (2).png");if (img.empty()){cout << "请检查输入的图像数据是否正确" << endl;return -1;}Mat HSV;cvtColor(img, HSV, COLOR_BGR2HSV);Mat imgs0, imgs1, imgs2;         //用于存放数组类型的结果Mat imgv0, imgv1, imgv2;          //用于存放vector类型的结果Mat result0, result1, result2;         //多通道合并的结果//输入数组参数的多通道分离与合并0Mat imgs[3];split(img, imgs);imgs0 = imgs[0];imgs1 = imgs[1];imgs2 = imgs[2];imshow("RGB-B通道", imgs0);imshow("RGB-G通道", imgs1);imshow("RGB-R通道", imgs2);imgs[2] = img;         //将数组中的图像通道数变成不一致merge(imgs, 3, result0);       //合并图像//imshow("result0", result0);     imshow最多显示4个通道因此结果Image Watch中查看Mat zero = cv::Mat::zeros(img.rows, img.cols, CV_8UC1);imgs[0] = zero;imgs[2] = zero;merge(imgs , 3, result1);imshow("result1", result1);//输入vector参数的多通道分离与合并vector<Mat> imgv;split(HSV, imgv);imgv0 = imgv.at(0);imgv1 = imgv.at(1);imgv2 = imgv.at(2);imshow("HSV-H通道", imgv0);imshow("HSV-S通道", imgv1);imshow("HSV-V通道", imgv2);imgv.push_back(HSV);     //将vector中的图像通道数变成不一致merge(imgv, result2);//imshow("result2", result2);       imshow最多显示4个通道,因此结果在Image Watch中查看waitKey(0);return 0;
}

OpenCV进阶--图像颜色空间相关推荐

  1. opencv进阶学习笔记13:图像形态学操作大全(膨胀,腐蚀,开闭,黑帽,顶帽,梯度)python版

    基础版学习笔记: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 基础版形态学: opencv学 ...

  2. opencv进阶学习笔记10:图像金字塔和图像梯度

    基础版笔记传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 图像金字塔 变小 变大 原理 ...

  3. opencv进阶学习9:图像阈值大全,图像二值化,超大图像二值化

    基础版笔记链接: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 基础版二值化讲解 opencv ...

  4. opencv进阶学习笔记6:使用鼠标在图像上绘制矩形框或者多边形框

    基础版笔记传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录: python+opencv进阶版学习笔记目录(适合有一定基础) 感兴趣区域传统绘制: openc ...

  5. opencv进阶学习笔记5:图像模糊操作,图像锐化,边缘保留滤波EPF(图像滤镜)

    基础版传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 模糊操作 方法:均值模糊,中值模 ...

  6. opencv进阶学习笔记3:像素运算和图像亮度对比度调节

    基础版传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版目录: python+opencv进阶版学习笔记目录(适合有一定基础) 像素运算 要求两张图大小,以及格式(np ...

  7. opencv进阶学习笔记2:numpy操作图像,色彩空间,查找指定颜色范围,通道分离与合并

    基础部分传送门 python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录: python+opencv进阶版学习笔记目录(适合有一定基础) Numpy操作图像 1.遍历图像每一 ...

  8. opencv进阶学习笔记7:直方图,直方图均衡化,直方图比较,直方图反向投影

    基础版传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 直方图基础讲解: opencv学 ...

  9. 使用Python和OpenCV在图像之间执行超快速的颜色转换

    使用Python和OpenCV在图像之间执行超快速的颜色转换 1. 效果图 2. 原理 2.1 颜色转移算法 2.2 步骤 2.3 算法改进 3. 源码 参考 这篇博客将介绍如何使用Python和Op ...

最新文章

  1. win8 explorer 进程频繁奔溃的原因及处理
  2. Character-level Convolutional Networks for Text Classification
  3. 【转】SAP PS 模块简介
  4. java 执行顺序混乱_java类执行顺序问题
  5. window. onload=function(){} 与 $(function(){}) 的区别
  6. Java中NIO和IO的比较
  7. 如何理解 Python 中的面向对象编程?
  8. pyspark.sql写入mysql_将pyspark dataframe写入MySQL数据库时出错
  9. Code Review 是一场苦涩但有意思的修行 | 凌云时刻
  10. 多线程有几种实现方法_Java多线程实现有哪几种方法?
  11. 中国无线充电行业发展规模与投资可行性咨询报告2022-2027年版
  12. 三、unaipp小程序二维码生成
  13. 图像降噪有哪些方法?
  14. 杭电OJ 11页2025//查找其中的最大字母,在该字母后面插入字符串“(max)”
  15. Internet Exploer 无法打开Internet站点、、、、已终止操作
  16. Ubuntu14.04下nfs服务器的搭建
  17. trove mysql 镜像_trove 基于 centos7 制作 mysql5.5 镜像
  18. C语言入门篇----system命令
  19. PAT甲级 1042 Shuffling Machine 模拟洗牌 map的使用
  20. 远程服务器返回错误码: (507) Insufficient Storage

热门文章

  1. Qt Creator5.7添加qwt绘图插件之成功案例解析
  2. 登出/退出java_Servlet代码
  3. windows10下wordcloud模块成功安装
  4. 终端节点、叶子节点和分支结点和非终端结点区别,数据结构常见误区答疑
  5. 第10课:《ChatGPT提示工程》—— Guidelines(入门)
  6. 文档在线打印,保持样式不变解决方法
  7. 最长可重叠的重复子串(2)
  8. 研究100位同行,我总结了从0到5年的新媒体晋级宝典
  9. 08s01 mysql_Mysql:SQL 错误 [08S01]: Communications link failure
  10. linux查看附近可用wifi并进行通过命令行连接