颜色空间学习

最近在做一个基于nao机器人的小项目:

任务目标:nao在场地中找到球,并且根据测距模型求出球距离机器人的数据,再调用naoAPI函数,走到球跟前,踢一脚!!!!

任务分块:1、调用nao视觉模块,显示摄像头拍摄的图片。

2、利用openCV,识别视野中的球,并作出标记,算出球体的质心位置。

3、将第二步的球的数据传给测距模型,得出距离数据信息。

4、调用NAOAPI行走函数,走到球跟前。

5,踢球(可选  待定)。

目前已经完成了任务一,本次小项目核心部分是第二个部分,也就是如何从机器人摄像头拍摄的图像中识别出球,并且计算出球体的质心,并在图像中标记出圆形和质心。

在这个任务中将会把目前所学的图像处理知识应用起来。第一个就是颜色空间,以前在自学图像处理的时候,一直弄不明白颜色空间是什么意思。下面请看:

        在彩色图像处理一章中开篇介绍了颜色空间模型,那么颜色空间主要是干嘛的呢?

颜色空间是定义、创建和观察颜色的方法,可以说是一种工具,那么对颜色的研究,产生了各种各样的颜色空间模型,包括色度学的CIE-RGB真实三原色系统和CIE-XYZ虚拟三原色系统,三分量归一化后用两个分量表示的色度图CIE-xyz和NCCrgb,用亮度和双色差表示的颜色空间CIE Lab和CIE Luv等;电视工业用的YIQ、YUV、YCbCr和YES;面向色调的由颜色心理三属性表示的颜色空间HSI、HSV、HSL、HSB、TSL以及MPEG7中采用的HMMD。另外还有一些针对某些类型的图像应用通过统计或物理分析,由RGB线性或非线性导出的颜色空间,比如用在肤色检测的颜色空间YU′V′和LUX、彩色不变特征、具有亮度适应能力的H-SV-V颜色空间等。

        常见的颜色空间有:RGB、YCbCr、HSV、CIE Lab、CIE Luv、CMY、KL、YIQ、YUV、YES、Farnsworth’s UCS等。根据由RGB空间线性或非线性变换得到,可分为两类:线性变换空间和非线性变换空间。其中线性变换空间包括:YES、YIQ、YUV、YCbCr、KL等;非线性变换空间包括:归一化rgb、GLHS(HSV、HSL、HSB)、CIE Lab、CIE Luv、TSL和Farnsworth’s UCS等。RGB色彩系统是最常见的色彩系统,它是由(CIE)国际照明委员会于1931年规定的。自然界中的所有颜色都可以由红( red) 、绿( green) 、蓝( blue)三基色组合而成,它们对应的波长分别为700nm、546. 1nm、435. 8nm,且在C IE - RGB 系统中,匹配等能白光的三原色(R) 、(G) 、(B)亮度比例为1. 0000: 4.9507: 0. 0601; 幅亮度比例为72. 0962: 1. 3791: 1. 0000。以红色为例,某种颜色含红色成分的多少可以认为的分为0到255共256个色阶, 0级表示不含红色, 255级表示含有100%的红色成分。同样,绿色和蓝色也可以分为256 级。这样,根据R、G、B的不同组合我们就可以组合出256 ×256 ×256 (约1600万)种颜色。

       CMY颜色空间是以颜料三基色(Cyan青,Magenta洋红,Yellow黄)为基础的颜色空间,它通常应用于印刷系统(一般的彩色印刷须加黑色)。RGB颜色空间通过颜色的相加来产生颜色,这种产生颜色的方法称为加色合成法(Additive Color Synthesis);而CMY颜色空间通过颜色相减的方法产生颜色,通常称这种方法为减色合成法(Subtractive Color Synthesis)。

        HSI颜色空间反映了人的视觉对色彩的感觉,它用H (Hue) 、S ( Saturation) 、I( Intensity)三参数描述颜色特性,其中H定义颜色的波长,称为色调; S表示颜色的深浅程度,称为饱和度; I表示强度或亮度. 在HSI颜色空间中,色调H和饱和度S包含了颜色信息,而强度I则与彩色信息无关. 这一特点使得在HSI格式下进行分色处理可以不受亮度的影响,采用固定的阈值即可将各种颜色有效地分离出来,大大简化图像分析和处理的工作量,提高处理效率,非常适合借助人的视觉系统来感知彩色特性的图像处理算法,关于色调,饱和度,亮度,可以参考链接:http://www.farfree.cn/Tool/ct/HSLcolor.asp,这里面的几张图片将三者详尽的表述了一番。

         HSI有许多类似的颜色空间,如HSV, HLS/HSL, HSB, HCI, HVC等. 它们都是从RGB 颜色空间变换而来,而且都是与设备相关的颜色空间. 这些颜色空间的优点是指定颜色方式非常直观,很容易选择所需要的色调(颜色) ,稍微调整它的饱和度和亮度就可改变颜色,在图像处理软件中得到广泛应用.

        HSV颜色空间(Hue色调、Saturation饱和度、Value亮度)是由Munseu提出的色彩系统模型,经常为艺术家所使用。这种颜色表达方式反映了人类观察色彩的原理,同时也有利于图像处理,它把亮度值V和色调H、饱和度S分离;HSV颜色空间表达颜色时在量化上对于人类视觉是均匀的。

       YUV色彩系统被欧洲的电视台系统所采用(属于PAL系统),其基本特征是将亮度信号与色度信号分开表示。其中Y与YIQ色彩系统的Y相同,都代表亮度,U和V是两个彩色分量,表示色差,一般是蓝色和红色的值。虽然U和V也指色调,但与I和Q的表达方式不同。

       总结一点,颜色空间就是用来表示彩色的,以便进行表示,更改,创建等,并且颜色空间之间还可以相互转换~

 

1. 色彩转换: dst = cv.cvtColor(src,code) 常用的是转换成 灰度图像 cv.COLOR_BGR2GRAY HSV图像cv.COLOR_BGR2HSV YUV图像 cv.COLOR_BGR2YUV YCrCb图像 cv.COLOR_BGR2YCrCb 其中hsv里:h通道数值范围是0-180,s通道范围是0-255,v通道范围是0-255 2. import cv2 as cv import numpy as np def extrace_object_demo(): capture = cv.VideoCapture("E:/opencv/picture/donghua.avi") while(True): ret,frame = capture.read() #cv.inRange(src,阈值下限,阈值上限) #作用:提取图像在阈值中间的部分 hsv = cv.cvtColor(frame,cv.COLOR_BGR2HSV) hsv_low = np.array([100,43,46])#blue的hsv阈值 hsv_high = np.array([124, 255, 255]) mask = cv.inRange(hsv,hsv_low,hsv_high) if ret ==False: break cv.imshow("mask",mask) cv.imshow("video_window",frame) c =cv.waitKey(20) if c==27: break def color_space_demo(image): gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) cv.imshow("2",gray) hsv = cv.cvtColor(image,cv.COLOR_BGR2HSV) cv.imshow("3",hsv) yuv = cv.cvtColor(image,cv.COLOR_BGR2YUV) cv.imshow("4",yuv) Ycrcb =cv.cvtColor(image,cv.COLOR_BGR2YCrCb) cv.imshow("5",Ycrcb) src = cv.imread("E:/opencv/picture/test1.jpg") b,g,r = cv.split(src) #cv.split 多通道图像的分离 cv.imshow("b",b) cv.imshow("g",g) cv.imshow("r",r) cv.namedWindow("1") src[:,:,2] = 0 cv.imshow("1",src) src = cv.merge([b,g,r])#cv.merge 各个通道的合并 cv.imshow("merge",src) src[:,:,2] = 0 #color_space_demo(src) extrace_object_demo() cv.waitKey(0) cv.destroyAllWindows() 总结: 1. 提取图像在阈值中间的部分,用二值化表示出来。用cv.inRange命令 cv.inRange(src,阈值下限,阈值上限) #作用:提取图像在阈值中间的部分 例如: hsv = cv.cvtColor(frame,cv.COLOR_BGR2HSV) hsv_low = np.array([100,43,46])#blue的hsv阈值 hsv_high = np.array([124, 255, 255]) mask = cv.inRange(hsv,hsv_low,hsv_high) 2. 多通道的分离与合并: cv.split(src) #cv.split 多通道图像的分离 例如 b,g,r = cv.split(src) #cv.split 多通道图像的分离 cv.imshow("b",b) cv.imshow("g",g) cv.imshow("r",r) cv.merge([b,g,r])#cv.merge 各个通道的合并 例如: src = cv.merge([b,g,r])#cv.merge 各个通道的合并 cv.imshow("merge",src)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值