【CV学习笔记】色彩空间

本文介绍了OpenCV中色彩空间转换的使用,包括RGB、灰度、HSV和YCRCB。通过实例展示了如何利用OpenCV的cvtColor函数进行转换,并给出了转换后的效果,强调了HSV在显示时需要转换回RGB的重要性。此外,还预告了后续将通过HSV过滤特定颜色空间的应用。
摘要由CSDN通过智能技术生成

关注“深度学习冲鸭”,一起学习一起冲鸭!

设为星标,第一时间获取更多干货

作者:云时之间

来源:知乎

链接:https://zhuanlan.zhihu.com/p/103387082

编辑:王萌

在这一篇文章中,我们将会学习使用一下OpenCV中色彩空间的转换函数,我们这里说的色彩空间是说的使用多种颜色(通常指三种以上),来表示颜色的方法,像是我们平时所说的RGB,HSV,YUV,YCRCB,都是色彩空间模型。OpenCV也很方便的封装了很多的色彩空间函数。下面我们一起来实践一下(以下所有试验都根据下图完成,我截取的Windows自带的壁纸^_^)

一:RGB

RGB我们很熟悉,一幅图像是由三个独立的红,蓝,绿通道构成,每个值代表每个像素的每个分量的度量值,如果值越高也就越亮。

因为人眼也是由三种感光细胞构成,因此RGB我们是最熟悉的,比如在电竞的时候,使用RGB灯可以刺激人的感官,提升成绩。

上图也就是RGB的实现方式。

二:灰度

灰度图像我们的应用也是非常广泛,包括我们后续的如果做视频追踪也都是将彩色视频逐帧转换为灰度图像再去定位,不过这是后话。

彩色转换为灰度图像的计算方法如下:

每个像素值只表示灰度信息这一单一信息

RGB[A]准换成灰度:Y=0.299*R+0.587*G+0.114*B

灰度转换为RGB[A]:R=Y,G=Y,B=Y,A=max(ChannelRange)

在OpenCV中我们可以使用cvtColor函数来实现转换

结果如下:

三:HSV

HSV颜色空间输入面向色度的颜色坐标系统的一种。这种类型的颜色模型接近人类颜色感知的仿真模型。

HSV的三个通道表示色度(H给出的颜色光谱构成的一种度量),饱和度(S给出主波长中的纯光比例,这表明一种颜色距离相同亮度灰度的程度)和纯度(V给出相对于白色光照强度的亮度),对应于直觉上的色彩、明暗和色调。HSV广泛应用于色彩的比较.

关于HSV的计算可以参考以下的公式:

这里我们用OpenCV实现:

得到的结果如下:

这样来看,似乎什么信息都没有,这里要注意一点,因为在代码中显示函数使用的是imshow(),这个函数是以RGB来显示的,因此我们使用HSV肯定是不正确的,如果想显示正确,必须要将其转换成RGB空间,这个具体以后再详细说一下。

四:YCRCB

该空间广泛用于视频和图像压缩,不能算作纯粹的色彩空间,它是RGB颜色空间的一种解码方式Y通道表示亮度,而Cr和Cb表示红色差值(在RGB空间中R通道和Y的差值)和蓝色差值(在RGB空间中B通道和Y的差值)各自的色度分量。

其变化的计算如下:

在OpenCV中,我们使用:

得到的结果如下:

总体来看,还是可以看得出相对于其他的色彩模型,还是能够保留一定的色彩,但是因为压缩的缘故,色彩空间还是差很多。

完整的代码如下,希望大家可以多多动手,亲身尝试一下。

import cv2 as cv
import numpy as np
#色彩空间转换函数:RGB,HSV,YUV重要
def color_space_demo(image):
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    cv.imshow("gray",gray)
    hsv = cv.cvtColor(image,cv.COLOR_BGR2HSV)
    cv.imshow("HSV",hsv)
    yuv = cv.cvtColor(image,cv.COLOR_BGR2YUV)
    cv.imshow("YUV",yuv)
    Ycrcb = cv.cvtColor(image,cv.COLOR_BGR2YCrCb)
    cv.imshow("YCRCB",Ycrcb)




#imread函数用来读取图片
src = cv.imread("D:/1.png")
#namedWindow函数用来指定输出图片的尺寸和窗口大小,autosize是自动大小
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
#imshow函数用来显示图像
cv.imshow("input image",src)
color_space_demo(src)
#等待键盘触发,否则一直在此窗口等待
cv.waitKey(0)
#结束所有的窗口
cv.destroyAllWindows()

而下一篇文章,我们将会通过一段视频,来通过HSV来过滤出特定的颜色空间,这也是很有意义的一项工作。并且在实际生活中很有用,如果大家遇见什么问题,也请多多和我交流。

每天进步一丢丢

设计自组织映射神经网络并设定网络训练参数——初始化权值 & 设计拓扑领域

初始化权值:可以随机初始化,但尽量使权值的初始位置与输入样本的大概分布区域充分重合,避免出现大量的初始“死节点”。一种简单易行的方法是从训练集中随机抽取m个输入样本作为初始权值。

设计拓扑领域:拓扑领域的设计原则是使领域不断缩小,这样输出平面上相邻神经元对应的权向量之间既有区别又有相当的相似性,从而保证当获胜节点对某一类模式产生最大响应时,其领域节点也能产生较大响应。领域的形状可以是正方形、六边形或者菱形。优势领域的大小用领域的半径表示,通常凭借经验来选择。

预告:设计自组织映射神经网络并设定网络训练参数——设计学习率

推荐阅读:

豆瓣9.4!《深度学习入门》笔记总结,带你从感知机入门深度学习!(连载)

豆瓣9.4!《深度学习入门:基于Python的理论与实现》学习笔记(2)

手磕实现 CNN卷积神经网络!-  《深度学习入门:基于Python的理论与实现》系列之三

长文超详讲解深度学习中你总是掌握不牢的若干知识点 - 《深度学习入门》系列之四

CV学习笔记:入坑必备

CV学习笔记(二):OpenCV基本操作

今天因为你的点赞,让我元气满满

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、付费专栏及课程。

余额充值