【图像篇】OpenCV图像处理(五)---图像的色彩空间

2022-06-01 19:05:56 浏览数 (1)

我们大家未来的命运如何,将会遭遇到什么,现在谁也难以预料,所能把握的,唯此心而已。

前言

大家好,在上一期的文章中,我们简单的讲解了图像的切割与ROI获取(【图像篇】OpenCV图像处理(四)---图像切割&ROI选取),这样做的目的是,使我们能够对图像的局部进行处理,而不是整个图像,因此,可以大大节约我们的工作时间哦,一起来看看今天的内容吧

一、图像的色彩空间

在前面的图像知识中,我们认识到了图像有两种基本的色彩空间,RGB图像和灰度图像,然后图像还有别的色彩空间,比如:BGR,LAB, HSV等等。

1.1 RGB图像分通道显示

1.原图

2.代码实践

代码语言:javascript复制
#coding:utf-8
import cv2
import numpy as np
# 图像路径
image_path = 'color.jpg'
# 读取图像
image = cv2.imread(image_path)
# 分通道获取图像
b = image[:, :, 0]
g = image[:, :, 1]
r = image[:, :, 2]
#由于上面额操作只是获取了对应通道的矩阵,就这样显示的话 是灰度图像
# 为了显示每个通道的颜色,需要采用以下操作,将非显示的通道元素设置为0
#image_b = cv2.merge([b, np.zeros(b.shape, np.uint8), np.zeros(b.shape, np.uint8)])
image_b = np.dstack((b, np.zeros(b.shape, np.uint8), np.zeros(b.shape, np.uint8)))
image_g = np.dstack((np.zeros(b.shape, np.uint8), g, np.zeros(b.shape, np.uint8)))
image_r = np.dstack((np.zeros(b.shape, np.uint8), np.zeros(b.shape, np.uint8), r))
cv2.imshow("image_b", image_b)
cv2.imshow("image_g", image_g)
cv2.imshow("image_r", image_r)
cv2.waitKey(0)

代码解读:

上述代码较为简单,基本就是图像的读取操作,接着就是对图像分通道获取矩阵,np.dstack()函数是比较注意的地方,按照代码中的操作解读,就是将不显示的通道进行赋零操作,然后将真正的通道图像显示。

3.效果展示

如上图可以看到,RGB图像分通道的真实效果是这样的,在上上期的文章中,我们并没有讲到这次补上了。

二、色彩空间转换(BGR to RGB)

在前期的文章中,我们了解到opencv读取的图像格式是BGR格式,现在就让我们一起来将其转换为RGB图像吧,同时看看他们的显示的不同。

2.1 代码实践

代码语言:javascript复制
#coding:utf-8
import cv2
import numpy as np
# 图像路径
image_path = 'color.jpg'
# 读取图像
image = cv2.imread(image_path)
cv2.imshow("image",image)
# 图像格式转换 BGR-RGB
newImg = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
cv2.imshow("newImg",newImg)
cv2.waitKey(0)

代码解读:

本次代码主要注意:

cv2.cvtColor(image, cv2.COLOR_BGR2RGB)函数,该函数主要是两个参数,第一个是需要转换的图像数据,第二个是想要转换的色彩空间。

2.2 效果展示

三、HSV色彩空间

HSV色彩空间(Hue-色调、Saturation-饱和度、Value-值)将亮度从色彩中分解出来,在图像增强算法中用途很广,在很多图像处理任务中,经常将图像从RGB色彩空间转换到了HSV色彩空间,以便更好地感知图像颜色,利用HSV分量从图像中提取感兴趣的区域。

H的范围是[0,360),S和V的范围是[0,1]。

HSV色彩空间如下图所示,用一个倒圆锥体表示整个色彩空间:

HSV-RGB对应表格:

3.1 RGB到HSV的转换的Demo

3.2 代码实践

代码语言:javascript复制
# -*- coding:utf-8 -*-

import cv2
image = cv2.imread('color.jpg') # 根据路径读取一张图片
cv2.imshow("BGR", image) # 显示图片

# 转化图片到HSV色彩空间
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
cv2.imshow("HSV", hsv_image) # 显示图片
cv2.waitKey(0) # 等待键盘触发事件,释放窗口

代码解读:

该段代码中

cv2.cvtColor(image, cv2.COLOR_BGR2HSV)起到了转换的功能,没必要特别记忆,一般的IDE都会有提示的,只要知道用哪个色彩空间就好。

3.3 效果展示

从上图可以看到,转换后的图像变得不那么好看了,那这样做有啥用呢,其实这样做大有用处,比如我们要提取天上的云彩,就可以通过设置HSV色彩空间的高低阈值来做,具体的操作我们后期再来实践。

END

结语

好了,本期的OpenCV图像处理知识分享结束了,今天的内容有点多,希望大家下去好好理解并且实践哦,如果遇到不太好理解的地方,请记得后台咨询小编哦,我们一起来解决!

0 人点赞