改变色彩空间
- 本节的主要任务是学会如何使用 OpenCV 来改变图片的色彩空间。
一. 学习目标
- 学习怎么从一个色彩空间转换到另一个色彩空间,向从 BGR ↔ \leftrightarrow ↔ Gray ,BGR ↔ \leftrightarrow ↔ RGB ,BGR ↔ \leftrightarrow ↔ HSV 等。
- 编写一个应用程序用来提取视频中的 彩色对象。
- 学习函数:cv.cvtColor(), cv.inRange() 等。
二. 改变色彩空间
- 在 OpenCV 中,超过 150 多种色彩空间可以相互转换。但是,我们今天只讲两种最常用的色彩空间转换,BGR ↔ \leftrightarrow ↔ Gray 以及 BGR ↔ \leftrightarrow ↔ HSV。
- 在 OpenCV 中,使用 cv.cvtColor(input_image, flag) 函数来实现色彩空间转换。其中 flag 决定转换的类型。
- 我们可以通过以下方式来查看所有的 flag :
>>> import cv2 as cv >>> flag = [i for i in dir(cv) if i.startswith("COLOR_")] >>> print(flag)
- 运行结果
- 从 BGR → \rightarrow → Gray 转换的 flag 是 cv.COLOR_BGR2GRAY ,从 BGR → \rightarrow → HSV 的 flag 是 cv.COLOR_BGR2HSV 。
三. 目标跟踪
- 在学会 BGR → \rightarrow → HSV 后,我们就可以使用它去提取色彩目标。相较于BGR,HSV 确定颜色会更容易。在此次的应用程序中,我们将会去捕捉蓝色目标。
- 应用程序方法步骤:
- 提取视频中的每一帧;
- 将 BGR 色彩空间转换成 HSV 色彩空间;
- 在 HSV 图像中设定蓝色范围阈值;
- 提取蓝色物体。
- 具体的代码演示:
import cv2 as cv import numpy as np # 打开摄像头 cap = cv.VideoCapture(0) while(1): # 提取每一帧 _, frame = cap.read() # 色彩空间转换 hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV) # 设定在 HSV 中蓝色的取值范围 lower_blue = np.array([110,50,50]) upper_blue = np.array([130,255,255]) # 进行二值化处理 mask = cv.inRange(hsv, lower_blue, upper_blue) # 按位运算,得到蓝色区域 res = cv.bitwise_and(frame,frame, mask= mask) cv.imshow('frame',frame) cv.imshow('mask',mask) cv.imshow('res',res) k = cv.waitKey(5) & 0xFF if k == 27: break cv.destroyAllWindows()
- 如果想提取其他的颜色,我们只需要改变取值范围就可以了。
- 如果想了解更多关于 HSV 色彩空间的知识,可以观看这篇文章:OpenCV—HSV颜色空间介绍 。
四. 结语
- 如果其中有不对的地方或是需要改进的地方,请指正。
- 联系方式 email:lwl510ll@163.com 。
- 本文到这就结束了,谢谢大家观看。