这篇随笔介绍使用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进行图像处理入门教程(三)色彩空间的更多相关文章

  1. PySide——Python图形化界面入门教程(三)

    PySide——Python图形化界面入门教程(三) ——使用内建新号和槽 ——Using Built-In Signals and Slots 上一个教程中,我们学习了如何创建和建立交互widget ...

  2. Python开发的入门教程(一)-数据类型、变量

    介绍 Python第一门课程,是Python开发的入门教程,将介绍Python语言的特点和适用范围,Python基本的数据类型,条件判断和循环,函数,以及Python特有的切片和列表生成式. Pyth ...

  3. 无废话ExtJs 入门教程三[窗体:Window组件]

    无废话ExtJs 入门教程三[窗体:Window组件] extjs技术交流,欢迎加群(201926085) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3 ...

  4. Elasticsearch入门教程(三):Elasticsearch索引&映射

    原文:Elasticsearch入门教程(三):Elasticsearch索引&映射 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文 ...

  5. RabbitMQ入门教程(三):Hello World

    原文:RabbitMQ入门教程(三):Hello World 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog. ...

  6. JasperReports入门教程(三):Paramters,Fields和Detail基本组件介绍

    JasperReports入门教程(三):Paramter,Field和Detail基本组件介绍 前言 前两篇博客带领大家进行了入门,做出了第一个例子.也解决了中文打印的问题.大家跟着例子也做出了de ...

  7. python之scrapy入门教程

    看这篇文章的人,我假设你们都已经学会了python(派森),然后下面的知识都是python的扩展(框架). 在这篇入门教程中,我们假定你已经安装了Scrapy.如果你还没有安装,那么请参考安装指南. ...

  8. Python运算符 - Python零基础入门教程

    目录 一.算术运算符 二.赋值运算符 三.比较运算符 四.运算符的优先等级 五.重点总结 六.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python ...

  9. Python break/continue - Python零基础入门教程

    目录 一.break 二.continue 三.重点总结 四.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 在 Python wh ...

  10. Python for循环 - Python零基础入门教程

    目录 一.for 循环语法 二.for 循环实战 三.重点总结 四.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 在 Python ...

随机推荐

  1. hdu1263 水果

    Problem Description 夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样J ...

  2. 放苹果 POJ - 1664 递推

    把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. Input 第一行是测试数据的数目t(0 <= t < ...

  3. nginx 80端口跳转到443

    nginx配置文件80配置中增加 rewrite ^ https://$http_host$request_uri? permanent; 如图: https://blog.csdn.net/jian ...

  4. jenkins:实现Jenkinsfile与Json的转换

    实现Jenkinsfile与Json的转换 目录 实现Jenkinsfile与Json的转换 方法1:使用现有的jenkins插件 参考 方法2:解析原生的jenkinsfile文件 参考 最近在做个 ...

  5. centos7源码编译安装lamp/lnmp

    centos7源码编译安装lamp/lnmp 进程:是包工头(相当于是个门,只管开门关门,不管门内的事儿) 线程:是各种工种(cpu调度的是线程) 进程 是一件事情, 线程 是 同一个时间范围内 同时 ...

  6. 1054D Changing Array 【位运算+思维】

    题目:戳这里 题意:两个数n,k,满足给的n个数小于2的k次方.每个数可以进行一次操作,即把a[i]换成a[i]^(1<<k-1);求最多的连续区间数使得 区间[L,R] (1<=L ...

  7. USB2.0协议学习笔记---USB数据包结构

    USB包类型和传输过程  USB是一种串行总线,因此数据都是一位一位传输的,如同串口那样,但是USB在真实物理电路上却不是TTL电平,而是一种差分信号采用NRZI编码,就是用变化表示0,不变表示1,同 ...

  8. Linux Bash Script conditions

    Linux Bash Script conditions shell 编程之条件判断 条件判断式语句.单分支 if 语句.双分支 if 语句.多分支 if 语句.case 语句 refs http:/ ...

  9. Vue & Sentry

    Vue & Sentry config.errorHandler https://cn.vuejs.org/v2/api/#errorHandler Vue.config.errorHandl ...

  10. git tag All In One

    git tag All In One $ git tag --help # (cedec380)在指定的分支上打 tag $ git tag -a stable-version-1.1.1 cedec ...