【图像处理】使用OpenCV+Python进行图像处理入门教程(三)色彩空间
这篇随笔介绍使用OpenCV进行图像处理的第三章 色彩空间。
3 色彩空间
之前的介绍,大多是基于BGR色彩空间进行的,但针对不同的实际情况,研究人员提出了许多色彩空间,它们都有各自擅长处理的领域。所以,我们需要学习如何对不同色彩空间的图像进行转换映射。
3.1 色彩空间及类型转换函数
(一)色彩空间
常见的色彩空间有GRAY色彩空间、HSV色彩空间、YCrCb色彩空间、CMYK色彩空间、XYZ色彩空间、YUV色彩空间等(颜色模型)。
我们只展示出GRAY灰度模型转换为RGB颜色模型的方式:
Gray=0.299R+0.587G+0.114B
以后需要用到其他哪种颜色模型之间的转化,百度即可(手动狗头)
(二)类型转换函数
OpenCV提供了不同色彩空间进行转化的函数语法,如下:
dst=cv2.cvtColor(src,code [, dstCn])
其中,dst表示输出图像,src表示输入图像,code是色彩空间转换代码(枚举值太多,百度可得),dstCn是图像的通道数(不写默认为自动获得)。
3.2 类型转换实例
本节通过一个实例的代码,展示cv2.cvtColor()函数的用法及功能。
实例:将BGR模式转换为灰度图像,再将灰度图像转换为RGB模式。
1 #将BGR模式转换为灰度图像,再将灰度图像转换为RGB模式
2 import cv2
3 import numpy as np
4 bgr=np.random.randint(0,256,size=[2,4,3],dtype=np.uint8) #生成2×4×3的BGR图像
5 gray=cv2.cvtColor(bgr,cv2.COLOR_BGR2GRAY) #BGR图像转换为灰度图像
6 rgb=cv2.cvtColor(gray,cv2.COLOR_GRAY2RGB) #灰度图像转换为RGB图像
7 print('bgr=\n',bgr)
8 print('gray=\n',gray)
9 print('rgb=\n',rgb)
3.3 HSV色彩空间应用
实际中,我们经常使用HSV色彩空间来感知色调、饱和度、亮度。
色调(Hue):取值范围是[0,360]
饱和度(Saturation):取值范围是[0,1]
亮度(Value):取值范围是[0,1]
下面我们通过两个举例,来学习HSV色彩空间的代码及功能。
举例一:在OpenCV中测试BGR图像的不同颜色变换到HSV色彩空间后,各个分量的值。
1 #在OpenCV中测试BGR图像的不同颜色变换到HSV色彩空间后,各个分量的值
2 import cv2
3 import numpy as np
4 #------------测试OpenCV中蓝色分量的值-----------
5 imgBlue=np.zeros([1,1,3],dtype=np.uint8)
6 imgBlue[0,0,0]=255 #0号通道代表蓝色
7 Blue=imgBlue
8 BlueHSV=cv2.cvtColor(Blue,cv2.COLOR_BGR2HSV) #BGR模式的蓝色变换到HSV色彩空间
9 print('Blue=\n',Blue)
10 print('BlueHSV=\n',BlueHSV)
11 #------------测试OpenCV中绿色分量的值-----------
12 imgGreen=np.zeros([1,1,3],dtype=np.uint8)
13 imgGreen[0,0,1]=255 #1号通道代表绿色
14 Green=imgGreen
15 GreenHSV=cv2.cvtColor(Green,cv2.COLOR_BGR2HSV) #BGR模式的绿色变换到HSV色彩空间
16 print('Green=\n',Green)
17 print('GreenHSV=\n',GreenHSV)
18 #------------测试OpenCV中红色分量的值-----------
19 imgRed=np.zeros([1,1,3],dtype=np.uint8)
20 imgRed[0,0,2]=255 #2号通道代表红色
21 Red=imgRed
22 RedHSV=cv2.cvtColor(Red,cv2.COLOR_BGR2HSV) #BGR模式的红色变换到HSV色彩空间
23 print('Red=\n',Red)
24 print('RedHSV=\n',RedHSV)
举例二:调整HSV色彩空间内V通道的值,观察其处理结果。
1 #调整HSV色彩空间内V通道的值,观察其处理结果,以实现艺术效果
2 import cv2
3 img=cv2.imread('E:/python_opencv/tupian.jpg')
4 hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV) #BGR模式转换为HSV模式
5 h,s,v=cv2.split(hsv) #通道拆分
6 v[:,:]=255 #V通道置为255
7 newHSV=cv2.merge([h,s,v]) #通道合并为新的HSV图片
8 art=cv2.cvtColor(newHSV,cv2.COLOR_HSV2BGR) #HSV模式转换为BGR模式
9 cv2.imshow('img',img)
10 cv2.imshow('art',art)
11 cv2.waitKey()
12 cv2.destroyAllWindows()
3.4 Alpha通道
在RGB色彩空间的基础上,还可以加一个A通道,叫做Alpha通道,此时原图像类型转变为RGBA模式,例如常见的PNG类型图像就是RGBA色彩空间的。Alpha通道的取值范围是[0,1]或[0,255],表示从透明到不透明。
下面是一个举例,展示Alpha通道的代码和分析:
1 #编写程序,分析alpha通道的值
2 import cv2
3 import numpy as np
4 img=np.random.randint(0,256,size=[2,3,3],dtype=np.uint8) #生成2×3×3的BGR图像
5 bgra=cv2.cvtColor(img,cv2.COLOR_BGR2BGRA)
6 print('img=\n',img)
7 print('bgra=\n',bgra)
8 b,g,r,a=cv2.split(bgra)
9 print('a=\n',a)
10 a[:,:]=125
11 bgra=cv2.merge([b,g,r,a])
12 print('bgra=\n',bgra)
这次内容就分享到这里了,下次继续更新第4章图像的几何变换,希望与各位老师和小伙伴们交流学习~
【图像处理】使用OpenCV+Python进行图像处理入门教程(三)色彩空间的更多相关文章
- PySide——Python图形化界面入门教程(三)
PySide——Python图形化界面入门教程(三) ——使用内建新号和槽 ——Using Built-In Signals and Slots 上一个教程中,我们学习了如何创建和建立交互widget ...
- Python开发的入门教程(一)-数据类型、变量
介绍 Python第一门课程,是Python开发的入门教程,将介绍Python语言的特点和适用范围,Python基本的数据类型,条件判断和循环,函数,以及Python特有的切片和列表生成式. Pyth ...
- 无废话ExtJs 入门教程三[窗体:Window组件]
无废话ExtJs 入门教程三[窗体:Window组件] extjs技术交流,欢迎加群(201926085) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3 ...
- Elasticsearch入门教程(三):Elasticsearch索引&映射
原文:Elasticsearch入门教程(三):Elasticsearch索引&映射 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文 ...
- RabbitMQ入门教程(三):Hello World
原文:RabbitMQ入门教程(三):Hello World 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog. ...
- JasperReports入门教程(三):Paramters,Fields和Detail基本组件介绍
JasperReports入门教程(三):Paramter,Field和Detail基本组件介绍 前言 前两篇博客带领大家进行了入门,做出了第一个例子.也解决了中文打印的问题.大家跟着例子也做出了de ...
- python之scrapy入门教程
看这篇文章的人,我假设你们都已经学会了python(派森),然后下面的知识都是python的扩展(框架). 在这篇入门教程中,我们假定你已经安装了Scrapy.如果你还没有安装,那么请参考安装指南. ...
- Python运算符 - Python零基础入门教程
目录 一.算术运算符 二.赋值运算符 三.比较运算符 四.运算符的优先等级 五.重点总结 六.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python ...
- Python break/continue - Python零基础入门教程
目录 一.break 二.continue 三.重点总结 四.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 在 Python wh ...
- Python for循环 - Python零基础入门教程
目录 一.for 循环语法 二.for 循环实战 三.重点总结 四.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 在 Python ...
随机推荐
- 博弈论入门——Nim游戏引入
说实话,我真的对这个游戏看得是一脸懵逼,因为(我太弱了)我没有明白一些变量的意思,所以一直很懵,现在才明白,这让我明白博弈论(还可以骗钱)博大精深; 以下是我自己思考的过程,也许不严谨,但是最终明白了 ...
- Educational Codeforces Round 69 (Rated for Div. 2) C. Array Splitting (思维)
题意:给你一个长度为\(n\)的升序序列,将这个序列分成\(k\)段,每一段的值为最大值和最小值的差,求\(k\)段值的最小和. 题解:其实每一段的最大值和最小值的差,其实就是这段元素的差分和,因为是 ...
- AtCoder Beginner Contest 173 D - Chat in a Circle (贪心)
题意:有一个空环和\(n\)个点,每次可以选择一个点放在空环上,并且获得周围两个点中最小的那个的权值,问能获得的最大的权值是多少? 题解:我们每次都优先放最大的进去,注意每次放的时候都要将这个点放在当 ...
- 【ybt金牌导航1-2-4】免费馅饼
免费馅饼 题目链接:ybt金牌导航1-2-4 题目大意 有一个直线,在某一个时刻有一个馅饼会出现在一些位置,有它的价值. 一个人一开始可以站在直线的任意地方,然后他每个时刻可以不移动,或向任意一边移动 ...
- Java RMI 实现一个简单的GFS(谷歌文件系统)——背景与设计篇
目录 背景 系统设计 1. 系统功能 2. Master组件 2.1 命名空间 2.2 心跳机制 2.3 故障恢复和容错机制 3. ChunkServer组件 3.1 本地存储 3.2 内存命中机制 ...
- Linux 网络协议栈开发基础篇—— 网桥br0
一.桥接的概念 简单来说,桥接就是把一台机器上的若干个网络接口"连接"起来.其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去.以使得网口之间的报文能够互相转发. 交换机 ...
- 查找命令中grep,find,which和whereis的使用及区别
在linux系统中,许多时候需要查找某些文件或者字符,如果用ls, cd 等基础命令就显得很无力了,那么Linux提供了grep,find,which 三种查找命令,在这里我记录一下: 一.grep命 ...
- sdut2879 枚举起点DP
这个题和乌龟棋之类的DP差不多要学会缩减状态 就是,,我们只需枚举当前这个人是谁,选什么颜色,A用了多少,B用了多少 C用了多少我们就不用枚举了,知道选了多少人,A,B用了多少,你还不知C用了多少么, ...
- VuePress 最新教程
VuePress 最新教程 https://vuepress.vuejs.org/ https://github.com/vuejs/vuepress VuePress plugins 插件通常会为 ...
- HTML script tag type all in one
HTML script tag type all in one script type https://developer.mozilla.org/en-US/docs/Web/HTML/Elemen ...