【图像处理】使用OpenCV+Python进行图像处理入门教程(三)色彩空间

【图像处理】使用OpenCV+Python进行图像处理入门教程(三)色彩空间,第1张

概述    这篇随笔介绍使用OpenCV进行图像处理的第三章色彩空间。3 色彩空间    之前的介绍,大多是基于BGR色彩空间进行的,但针对不同的实际情况,研究人员提出了许多色彩空间,它们都有各自擅长处理的领域。所以,我们需要学习如何对不同色彩空间的图像进行转换映射。3.1

       这篇随笔介绍使用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 cv23 import numpy as np4 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=imgGreen15 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=imgRed22 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[:,:]=12511 bgra=cv2.merge([b,g,r,a])12 print('bgra=\n',bgra)

 

这次内容就分享到这里了,下次继续更新第4章图像的几何变换,希望与各位老师和小伙伴们交流学习~

 

总结

以上是内存溢出为你收集整理的【图像处理】使用OpenCV+Python进行图像处理入门教程(三)色彩空间全部内容,希望文章能够帮你解决【图像处理】使用OpenCV+Python进行图像处理入门教程(三)色彩空间所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1189052.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存