这篇随笔介绍使用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. hdu 4315 Climbing the Hill && poj 1704 Georgia and Bob阶梯博弈--尼姆博弈

    参考博客 先讲一下Georgia and Bob: 题意: 给你一排球的位置(全部在x轴上操作),你要把他们都移动到0位置,每次至少走一步且不能超过他前面(下标小)的那个球,谁不能操作谁就输了 题解: ...

  2. hdu5391 Zball in Tina Town

    Problem Description Tina Town is a friendly place. People there care about each other. Tina has a ba ...

  3. 部署 WordPress 和 Wecenter

    目录 基本环境部署(LNMP) 安装 Nginx 安装 PHP7.1 安装 Mariadb 安装 NFS 部署 NFS 服务端 部署 NFS 客户端 部署 WordPress 首台服务器 环境部署 数 ...

  4. codeforces 870C

    C. Maximum splitting time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  5. Leetcode(9)-回文数

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...

  6. Netty(四)基于Netty 的简易版RPC

    3.1 RPC 概述 下面的这张图,大概很多小伙伴都见到过,这是 Dubbo 官网中的一张图描述了项目架构的演进过程 它描述了每一种架构需要的具体配置和组织形态.当网站流量很小时,只需一个应用,将所有 ...

  7. μC/OS-III---I笔记7---消息队列

    消息队列 任务之间仅仅靠信号量进行"沟通"是不够的,信号量可以标志事件的发生,却无法传递更多的数据,在需要任务间的数据信息传递时就绪要用到消息队列,传统我们一般在前后太系统中都是通 ...

  8. 设计模式六大原则 All In one

    设计模式六大原则 All In one 开闭原则: 对扩展开放,对修改关闭; 设计模式的六大原则: 0.总原则-开闭原则 对扩展开放, 对修改封闭; 在程序需要进行拓展的时候, 不能去修改原有的代码, ...

  9. JavaScript for, for...in, for...of, for-await...of difference All In One

    JavaScript for, for...in, for...of, for-await...of difference All In One for for...in for...of for-a ...

  10. webpack-cli bugs All In One

    webpack-cli bugs All In One Error: Cannot find module 'webpack-cli/bin/config-yargs' webpack version ...