day3 - 图像在不同色彩空间间的转换

本期将了解三种不同的颜色空间,RGB,HSV,GRAY。会使用OpenCV来读取三种颜色空间,并且操作不同空间的转换,观察不同颜色空间的特点。

完成本期内容,你可以:

  • 了解RGB,HSV,GRAY三种颜色空间的定义

  • 掌握读取图片到不同的颜色空间

  • 掌握三种颜色空间的转换

  • 掌握如何拆分、合并图像通道

若要运行案例代码,你需要有:

  • 操作系统:Ubuntu 16 以上 或者 Windows10

  • 工具软件:VScode 或者其他源码编辑器

  • 硬件环境:无特殊要求

  • 核心库:python 3.6.13, opencv-contrib-python 3.4.11.39,opencv-python 3.4.2.16

点击下载源码


RGB色彩空间

  • RGB色彩空间包含3个通道,R通道,G通道,B通道。

  • R 通道指的是红色(Red) 通道; G 通道指的是绿色通道; B 通道指的是蓝色(Blue) 通道, 并且每个色彩通道都在区间[ 0 , 25 5 ] 内进行取值。

  • 图像在计算机中是以矩阵的形式保存的,对于RGB图像模式,一张图像保存了三个矩阵,每个矩阵用于表示其中的一种颜色。由于矩阵的顺序不同,会有RGB模式,RBG模式,BRG模式等。但无论是RGB模式,RBG模式,还是BRG模式,本质上都是一种模式,只不过颜色矩阵的存储顺序不同。

请添加图片描述

HSV色彩空间

  • HSV 色彩空间是基于色调、饱和度和亮度而言的。

  • 色调(H)是指光的颜色,例如彩虹中的赤、橙、黄、绿、青、蓝、紫分别表示不同的色调,在OpenCV中, 色调在区间[ 0 , 180 ] 内取值。

  • 饱和度(S) 是指色彩的深浅。在OpenCV 中, 饱和度在区间[ 0 , 255 ] 内取值。当饱和度为0 时,图像将变为灰度图像。

  • 亮度(V) 是指光的明暗。与饱和度相同, 在OpenCV中, 亮度在区间[ 0 , 255 ]内取值。亮度值越大, 图像越亮; 当亮度值为0 时, 图像呈纯黑色。

请添加图片描述

GRAY色彩空间

  • GRAY 色彩空间通常指的是灰度图像, 灰度图像是一种每个像素都是从黑到白, 被处理为256 个灰度级别的单色图像。

  • 这256 个灰度级别分别用区间[ 0 , 255 ] 中的数值表示。其中,”0 ”表示纯黑色,“ 255 ” 表示纯白色, 0 ~255 之间的数值表示不同亮度( 即色彩的深浅程度) 的深灰色或者浅灰色。

请添加图片描述

不同色彩空间的转换

OpenCV中提供的不同空间转换的函数是 cv2.cvtColor( )。

函数原型: dst = cv2.cvtColor(src, code);

dst 为转换后的图像。

参数描述如下:

参数描述
src转换前的初始图像
code色彩空间转换码

色彩空间转换码,如下:

色彩空间转换码含义
cv2.COLOR_BGR2GRAY从BGR色彩空间转换到GRAY色彩空间
cv2.COLOR_RGB2GRAY从RGB色彩空间转换到GRAY色彩空间
cv2.COLOR_BGR2HSV从BGR色彩空间转换到HSV色彩空间
cv2.COLOR_RGB2HSV从RGB色彩空间转换到HSV色彩空间
cv2.COLOR_BGR2BGRA从BGR色彩空间转换到BGRA色彩空间

拆分图像通道

OpenCV 中提供的用于拆分图像通道的函数是 cv2.split()。

函数原型: b,g,r = cv2.split(bgr_image) ; h,s,v = cv2.split(hsv_image) .

b,g,r为查分后对应的B G R通道;h,s,v为拆分后的H S V通道。

参数描述如下:

参数描述
bgr_image一幅BGR图像
hsv_image一幅HSV图像

合并图像通道

OpenCV 中提供的用于合并图像通道的函数是 cv2.merge()。

函数原型: rgb = cv2.merge([r,g,b]) ; hsv = cv2.merge([h,s,v]) .

rgb 为按照 R -> G -> B 的顺序合并通道得到的图像;hsv 为按照 H -> S -> V 的顺序合并通道得到的图像。

参数描述如下:

参数描述
[r,g,b][R通道图像,G通道图像,B通道图像]
[h,s,v][H通道图像,S通道图像,V通道图像]

具体步骤

1. 创建项目结构

创建项目名为图像在不同色彩空间间的转换,项目根目录下新建code文件夹储存代码,新建dataset文件夹储存数据,项目结构如下:

图像在不同色彩空间间的转换                 # 项目名称
├── code                               # 储存代码文件
├── dataset                            # 储存数据文件

注:如项目结构已存在,无需再创建。

2. 将图像由BGR色彩空间转换到HSV色彩空间

  1. code文件夹下创建bgr2hsv.py文件;
  2. 读取dataset文件夹下的daisy.png图片,并进行展示,标题为daisy_bgr
  3. 将图片由BGR色彩空间转换到HSV色彩空间,并进行展示,标题为daisy_hsv
  4. 无限等待用户输入按键,按下按键后销毁所有窗口。

代码实现

# 导入OpenCV
import cv2
# 读取图像
img = cv2.imread('../dataset/daisy.png')
# 展示图像
cv2.imshow("daisy_bgr",img)
# 将图片由BGR色彩空间转换到HSV色彩空间
hsv_img = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
# 展示图像
cv2.imshow("daisy_hsv",hsv_img)
# 等待用户输入
cv2.waitKey(0)
# 销毁所有窗口
cv2.destroyAllWindows()

请添加图片描述

实验效果

3. 将图像由BGR色彩空间转换到GRAY色彩空间

  1. code文件夹下创建bgr2gray.py文件;
  2. 读取dataset文件夹下的daisy.png图片,并进行展示,标题为daisy_bgr
  3. 将图片由BGR色彩空间转换到GRAY色彩空间,并进行展示,标题为daisy_gray
  4. 无限等待用户输入按键,按下按键后销毁所有窗口。

代码实现

# 导入OpenCV
import cv2
# 读取图像
img = cv2.imread('../dataset/daisy.png')
# 展示图像
cv2.imshow("daisy_bgr",img)
# 将图片由BGR色彩空间转换到gray色彩空间
gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 展示图像
cv2.imshow("daisy_gray",gray_img)
# 等待用户输入
cv2.waitKey(0)
# 销毁所有窗口
cv2.destroyAllWindows()

请添加图片描述

实验效果

4. 拆分图像通道

  1. code文件夹下创建img_split.py文件;
  2. 读取dataset文件夹下的daisy.png图片;
  3. 将图片拆分为3个通道,并以此展示3个通道的图片;
  4. 无限等待用户输入按键,按下按键后销毁所有窗口。
  5. 无限等待用户输入按键,按下按键后销毁所有窗口。

代码实现

# 导入OpenCV
import cv2
# 读取图像
img = cv2.imread('../dataset/daisy.png')
# 将图片拆分为3个通道
b,g,r = cv2.split(img)
# 展示图像
cv2.imshow("B",b)
cv2.imshow("G",g)
cv2.imshow("R",r)
# 等待用户输入
cv2.waitKey(0)
# 销毁所有窗口
cv2.destroyAllWindows()

请添加图片描述

实验效果

OpenCV的 RGB,HSV,GRAY三种颜色空间的操作非常简单,在实际应用的过程中,需要我们知道,每种色彩空间的含义和用途,才能够正确处理图像,得到我们想要的效果。

点击下载源码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值