【图像处理】使用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 ...
随机推荐
- P1439 【模板】最长公共子序列(DP)
题目描述 给出1-n的两个排列P1和P2,求它们的最长公共子序列. 输入输出格式 输入格式: 第一行是一个数n, 接下来两行,每行为n个数,为自然数1-n的一个排列. 输出格式: 一个数,即最长公共子 ...
- Educational Codeforces Round 89 (Rated for Div. 2)D. Two Divisors 线性筛质因子
题目链接:D:Two Divisors 题意: 给你n个数,对于每一个数vi,你需要找出来它的两个因子d1,d2.这两个因子要保证gcd(d1+d2,vi)==1.输出的时候输出两行,第一行输出每一个 ...
- Codeforces Round #643 (Div. 2) C. Count Triangles (数学公式)
题意:给你四个正整数\(A,B,C,D\),且\(A\le B\le C \le D\),有\(A\le x\le B\le y\le C \le z\le D\),求最多有多少组\((x,y,z)\ ...
- Codeforces Round #656 (Div. 3) C. Make It Good (贪心,模拟)
题意:给你一个数组\(a\),可以删除其前缀,要求操作后得到的数组是"good"的.对于"good":可以从数组的头和尾选择元素移动到新数组,使得所有元素移动后 ...
- .net core 更换yum源 / “No package libgdiplus-devel available.” 错误解决方法
安装 libgdiplus-devel yum install libgdiplus-devel 如果出现错误 No package libgdiplus-devel available. 原因可能是 ...
- CDN 概述
占位 CDN(Content Delivery Network)内容发布网络 推荐Blog: CDN 学习笔记
- 抓包 127.0.0.1 (loopback) 使用 tcpdump+wireshark
直接使用 wireshark无法抓取 127.0.0.1环回的数据包,一种解决方法是先传到路由器再返回,但这样可能造成拥塞. Linux 先使用tcpdump抓包并输出为二进制文件,然后wiresha ...
- MATLAB字符串分解, 合并
% 分解 % regexp s = 'ab/c/d.png' file_name = regexp(s, '/', 'split'); % 'd.png' % split fractions = sp ...
- Express vs Koa
Express vs Koa https://www.esparkinfo.com/express-vs-koa.html https://www.cleveroad.com/blog/the-bes ...
- JavaScript Best Practice
JavaScript Best Practice Clean, maintainable, execute code