OpenCV 的颜色空间转换
程序员文章站
2022-03-26 09:09:30
1 # coding: utf-8 2 3 ''' 4 第13章主要介绍:颜色空间转换 5 ''' 6 7 import cv2 8 import numpy as np 9 10 ''' 11 经常用到的颜色空间转换是: BGRGray 和 BGRHSV 12 cv2.cvtColor(input... ......
1 # coding: utf-8 2 3 ''' 4 第13章主要介绍:颜色空间转换 5 ''' 6 7 import cv2 8 import numpy as np 9 10 ''' 11 经常用到的颜色空间转换是: bgr<->gray 和 bgr<->hsv 12 cv2.cvtcolor(input_image , flag),flag是转换类型:cv2.color_bgr2gray,cv2.color_bgr2hsv 13 hsv(hue , saturation , value):色调,饱和度,明度 14 色度h:用角度度量,取值范围为0~360,红色开始按逆时针方向计算,红色为0度,绿色为120度,蓝色为240度 15 饱和度s:接近光谱色的程度,颜色可以看成是光谱色与白色混合结果,光谱色占的比例愈大,颜色接近光谱色的程度 16 越高,颜色饱和度就越高。光谱色中白色成分为0,饱和度达到最高,取值范围0%~100%,值越大,颜色越饱和 17 明度v:表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,与物体的透射比有关,取值 18 范围为0%(黑)~100%(白) 19 rgb面向硬件,hsv面向用户 20 在opencv中 21 h色度取值范围是[0,179] 22 s饱和度的取值范围是[0,255] 23 v明度的取值范围是[0,255] 24 拿opencv的hsv值与其他软件的hsv值进行对比时,要归一化 25 ''' 26 27 #获取颜色转换中所有可以使用的flag 28 def getcolorconvertflag(): 29 # dir() 查找module下的所有类 30 flags = [i for i in dir(cv2) if i.startswith("color_") ] 31 print(flags) 32 33 ''' 34 物体跟踪,可以将图像从bgr转换到hsv后,提取某个特定颜色的物体 35 提取蓝色物体步骤: 36 1从视频中获取每一帧图像 37 2将图像转换到hsv空间 38 3设置hsv阈值到蓝色范围 39 4获取蓝色物体 40 ''' 41 def trackobject(): 42 cap = cv2.videocapture(0) 43 while(1): 44 ret , frame = cap.read() 45 46 #转换为hsv 47 hsv = cv2.cvtcolor(frame , cv2.color_bgr2hsv) 48 #注意这里的上下限都是一个含有hsv的三元组 49 lower_blue = np.array([110 , 50 , 50]) 50 upper_blue = np.array([130 , 255 , 255]) 51 ''' 52 cv2.inrange(src , lowerb , upperb[,dst]) 53 作用:更改函数对某个单通道中的元素检查其值是否在范围中 54 src:输入数组,lowerb:包含低边界的数组,upperb:包含高边界的数组,dst:输出数组 55 如果src(i)符合范围,则dst(i)被设置为255,也就是说dst返回的是非黑即白的图像,而且符合要求 56 的部分是白色的 57 ''' 58 #构建物体掩膜(黑白部分),注意这里要使用hsv 59 mask = cv2.inrange(hsv , lower_blue , upper_blue) 60 #对原图像和掩膜进行位运算 61 res = cv2.bitwise_and(frame ,frame , mask = mask) 62 cv2.imshow("frame" , frame) 63 cv2.imshow("mask" , mask) 64 cv2.imshow("res" , res) 65 k = cv2.waitkey(5) & 0xff 66 #ascii中27是esc 67 if k == 27: 68 break 69 cv2.destroyallwindows() 70 71 72 ''' 73 如何找到要跟踪对象的hsv值,使用cv2.cvtcolor,传入的参数是(你想要的)bgr值而不是一幅图。 74 例如找到绿色的hsv值,在终端输入以下命令 75 ''' 76 def gethsv(): 77 ''' 78 三层括号对应于:cvarray,cvmatiplimage 79 也就是第一个括号是数组,第二个是矩阵,第三个是图像 80 ''' 81 green = np.uint8( [ [ [0 , 255 , 0] ] ]) 82 hsv_green = cv2.cvtcolor(green , cv2.color_bgr2hsv) 83 print(hsv_green) 84 ''' 85 可以分别用[h-100 , 100 , 100]和[h+100 , 255 , 255]做上下阈值,也可以用图像编辑软件(gimp) 86 ''' 87 88 89 90 91 92 93 94 95 if __name__ == "__main__": 96 #getcolorconvertflag() 97 #trackobject() 98 gethsv() 99
上一篇: 5.8 Properties
推荐阅读
-
cdr常用的视频颜色模式及转换的基本知识介绍
-
荐 opencv进阶学习笔记2:numpy操作图像,色彩空间,查找指定颜色范围,通道分离与合并
-
jquery实现将获取的颜色值转换为十六进制形式的方法教程
-
数字图像处理与Python实现-颜色空间转换-RGB颜色空间与YUV颜色空间转换
-
将CMYK颜色值和RGB颜色相互转换的PHP代码
-
C#实现HSL颜色值转换为RGB的方法
-
python实现颜色空间转换程序(Tkinter)
-
利用Python和OpenCV库将URL转换为OpenCV格式的方法
-
Python数字图像处理教程之图像数据类型以及颜色空间转换
-
数字图像处理与Python实现-颜色空间转换-RGB颜色空间与YCbCr颜色空间转换