我们大家未来的命运如何,将会遭遇到什么,现在谁也难以预料,所能把握的,唯此心而已。
前言
大家好,在上一期的文章中,我们简单的讲解了图像的切割与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图像处理知识分享结束了,今天的内容有点多,希望大家下去好好理解并且实践哦,如果遇到不太好理解的地方,请记得后台咨询小编哦,我们一起来解决!