0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

图像处理的颜色空间及其OpenCV实现

智能感知与物联网技术研究所 来源:通信信号处理研究所 作者:通信信号处理研究 2020-12-25 11:36 次阅读

对图像的颜色空间做了一个概念性的介绍,并通过代码的方式可视化了每种颜色空间的每个通道所表示的意义。

文章内容包括:

什么是颜色空间?

颜色空间有哪些类别?

如何在OpenCV中实现?

什么是颜色空间?

颜色是一种连续的现象,它意味着有无数种颜色。但是,人类的眼睛和感知能力是有限的。所以,为了识别这些颜色,我们需要一种媒介或这些颜色的表示,这种颜色的表示被称为色彩空间。在技术术语中,一个颜色模型或颜色空间是一个特定的3-D坐标系统以及该系统中的一个子空间,其中每一种颜色都由一个单点表示。

有哪些颜色空间的类型?

目前主要有五种类型的颜色模型。但是,我将只写一些常见的(RGB、HSV和HSL)。

RGB(Red Green Blue)

HSL(Hue Saturation Lightness)

HSV(Hue Saturation Value)

YUV(Luminance, blue–luminance, red–luminance)

CMYK(Cyan, Magenta, Yellow, Key)

RGB颜色空间:

RGB颜色空间是三维坐标系中红、绿、蓝坐标所表示的著名颜色空间之一。在更专业的术语中,RGB将颜色描述为由三个部分组成的元组。每个部分都可以取0到255之间的值,其中元组(0,0,0)表示黑色,元组(255,255,255)表示白色。元组的第0、第1和第2个部分分别表示红、绿、蓝的分量。

RGB颜色空间的Python实现:

这里我们导入了必要的库,cv2用于颜色空间转换,NumPy用于数组操作,Matplotlib用于显示图像,os用于访问图像目录,tqdm用于显示加载栏。

hsl_img=cv2.cvtColor(X[0],cv2.COLOR_BGR2HLS)####CONVERTINGBGRCOLORSPACEINTOHSLCOLORSPACE####
hsl_img_1=hsl_img.copy()
hsl_img_2=hsl_img.copy()
hsl_img_3=hsl_img.copy()
hsl_img_1[:,:,1]=0####HUE-->ZERO####
hsl_img_1[:,:,2]=0
hsl_img_2[:,:,0]=0####SATURATION-->ZERO####
hsl_img_2[:,:,2]=0
hsl_img_3[:,:,0]=0####LIGHTNESS-->ZERO####
hsl_img_3[:,:,1]=0

设置两个空列表Z和X,分别用于存储带有各自图像的标签,然后指定图像大小和路径目录。在这之后,我定义了两个函数,用于返回flower类型(assign_lable)和访问每个图像、读取和调整其大小(make_train_data)。

Z,X=[],[]
IMG_SIZE=150
FLOWER_SUNFLOWER_DIR='../input/flowers-recognition/flowers/flowers/sunflower'

defassign_label(img,flower_type):
returnflower_type

defmake_train_data(flower_type,DIR):
forimgintqdm(os.listdir(DIR)):
label=assign_label(img,flower_type)
path=os.path.join(DIR,img)
img=cv2.imread(path,cv2.IMREAD_COLOR)
img=cv2.resize(img,(IMG_SIZE,IMG_SIZE))#Resizingtheimage

加载图像,然后在OpenCV以BGR格式读取图像时将BGR颜色空间转换为RGB颜色空间,但Maplotlib使用RGB格式来显示图像。这就是为什么我们需要转换颜色空间后,读取图像为RGB。

然后对固定图像进行三份拷贝,并将每份拷贝的任何双色通道设为零,分别用于访问红、绿、蓝通道。如果你让第0个颜色通道都是0那么你只会得到蓝色通道。

make_train_data('Sunflower',FLOWER_SUNFLOWER_DIR)#####LoadingSunflowerData
fix_img=cv2.cvtColor(X[0],cv2.COLOR_BGR2RGB)###########CONVERTINGBGRCOLORSPACEINTORGBCOLORSPACE#########
new_img_1=fix_img.copy()
new_img_2=fix_img.copy()
new_img_3=fix_img.copy()
new_img_1[:,:,0]=0#makingRchannelzero####ForBLUEchannel#####
new_img_1[:,:,1]=0#makingGchannelzero
new_img_2[:,:,1]=0####ForREDcolorChannel####
new_img_2[:,:,2]=0
new_img_3[:,:,0]=0###ForGREENChannel####
new_img_3[:,:,2]=0

显示图像:

f,axes=plt.subplots(1,3,figsize=(15,15))
list=[new_img_1,new_img_2,new_img_3]
i=0
foraxinaxes:
ax.imshow(list[i])
i+=1

HSL颜色空间:

HSL的一般含义是色调、饱和度和明度。你可以将HSL以圆柱体的形式可视化,如图2(a)所示。围绕圆柱体的是不同的颜色,比如绿色、黄色、红色等等(我们真正想要的颜色)。饱和度是指颜色的多少,而明度是指颜色有多暗或多亮。正如你所看到的,圆柱体的顶部全是白色,底部全是黑色。

图2:HSL颜色空间

HSL颜色空间的Python实现:

使用OpenCV函数**cvtColor()**将BGR颜色空间转换为HSL颜色空间,在这里我们需要传递图像,以及从哪个颜色空间到哪个颜色空间我们想要改变图像。然后再复制并使两个颜色通道为零,以便分别显示每个颜色通道。

hsl_img=cv2.cvtColor(X[0],cv2.COLOR_BGR2HLS)####CONVERTINGBGRCOLORSPACEINTOHSLCOLORSPACE####
hsl_img_1=hsl_img.copy()
hsl_img_2=hsl_img.copy()
hsl_img_3=hsl_img.copy()
hsl_img_1[:,:,1]=0####HUE-->ZERO####
hsl_img_1[:,:,2]=0
hsl_img_2[:,:,0]=0####SATURATION-->ZERO####
hsl_img_2[:,:,2]=0
hsl_img_3[:,:,0]=0####LIGHTNESS-->ZERO####
hsl_img_3[:,:,1]=0

现在显示三个不同的颜色通道→

f,axes=plt.subplots(1,3,figsize=(15,15))
list=[hsl_img_1,hsl_img_2,hsl_img_3]
i=0
foraxinaxes:
ax.imshow(list[i])
i+=1

HSV颜色空间:

HSV这个名字来自于颜色模型的三个坐标,即色相、饱和度和值。它也是一个圆柱形的颜色模型,圆柱体的半径表示饱和度,垂直轴表示值,角度表示色调。对于观察者,色调是占主导地位的,饱和度是混合到色调中的白光的数量,value是chrome的强度,value较低颜色变得更加类似于黑色,value越高,颜色变得更加像颜色本身。通过改变这些参数,我们可以生成不同的颜色。

图3:HSV颜色空间

HSV颜色空间的Python实现:

使用cvtColor()函数将色彩空间转换为HSV色彩空间。然后再复制并使两个通道置为零,以便分别显示每个通道。

hsv_img=cv2.cvtColor(X[0],cv2.COLOR_BGR2HSV)
hsv_img_1=hsv_img.copy()
hsv_img_2=hsv_img.copy()
hsv_img_3=hsv_img.copy()
hsv_img_1[:,:,1]=0#HUE-->ZERO
hsv_img_1[:,:,2]=0
hsv_img_2[:,:,0]=0#SATURATION-->ZERO
hsv_img_2[:,:,2]=0
hsv_img_3[:,:,0]=0#VALUE-->ZERO
hsv_img_3[:,:,1]=0

单独显示每个颜色通道:

原文标题:解析丨图像处理基础:颜色空间及其OpenCV实现

文章出处:【微信公众号:通信信号处理研究所】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 图像处理
    +关注

    关注

    26

    文章

    1226

    浏览量

    55848

原文标题:解析丨图像处理基础:颜色空间及其OpenCV实现

文章出处:【微信号:tyutcsplab,微信公众号:智能感知与物联网技术研究所】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何实现PIL和OpenCV之间图像数据的转换呢?

    PIL图像数据格式转换成OpenCV图像数据格式
    的头像 发表于 02-25 13:43 519次阅读

    在全志H616核桃派上实现USB摄像头的OpenCV颜色检测

    在给核桃派开发板用OpenCV读取图像并显示到pyqt5的窗口上并加入颜色检测功能,尝试将图像中所有蓝色的东西都用一个框标记出来。颜色检测核
    发表于 01-22 10:10

    在核桃派上实现USB摄像头的OpenCV颜色检测

    在前几周的文章中已经介绍过如何在核桃派上用OpenCV读取图像并显示到pyqt5的窗口上,这里在上一篇文章的基础上,给开发板加入颜色检测功能,尝试将图像中所有蓝色的东西都用一个框标记出
    的头像 发表于 01-20 17:50 498次阅读
    在核桃派上<b class='flag-5'>实现</b>USB摄像头的<b class='flag-5'>OpenCV</b><b class='flag-5'>颜色</b>检测

    使用图像处理OpenCV从摄像头获取数据并在PyQt5上显示出来

    OpenCV能够处理图像、视频、深度图像等各种类型的视觉数据
    的头像 发表于 01-05 17:32 843次阅读
    使用<b class='flag-5'>图像</b><b class='flag-5'>处理</b>库<b class='flag-5'>OpenCV</b>从摄像头获取数据并在PyQt5上显示出来

    OpenCV4之图像的轮廓

    图像的轮廓是指图像中具有相同颜色或灰度值的连续点的曲线。轮廓和边缘是有联系的,边缘是轮廓的基础,轮廓是边缘的连续集合。
    的头像 发表于 01-02 12:24 238次阅读

    OpenCV4.8 CUDA编程代码教程

    OpenCV4支持通过GPU实现CUDA加速执行,实现OpenCV图像处理程序的加速运行,当前
    的头像 发表于 12-05 09:56 454次阅读
    <b class='flag-5'>OpenCV</b>4.8 CUDA编程代码教程

    机器视觉之图像增强和图像处理

    一、图像处理技术概述1.定义对原始获取图像进行一系列的运算处理,称为图像处理
    的头像 发表于 10-26 08:07 463次阅读
    机器视觉之<b class='flag-5'>图像</b>增强和<b class='flag-5'>图像</b><b class='flag-5'>处理</b>

    Opencv调用bmcv_image_vpp_convert做缩放或者颜色空间转换,得到的图片不一致是为什么?

    Opencv 读取图片后,cvMat 转为bmimage之 后, 调用 bmcv_image_vpp_convert 做缩放或者颜色空间转换,得到的图片不一致
    发表于 09-19 07:41

    用迅为RK3568开发板使用OpenCV处理图像颜色通道提取ROI

    本小节代码在配套资料“iTOP-3568 开发板\\\\03_【iTOP-RK3568 开发板】指南教程 \\\\04_OpenCV 开发配套资料\\\\07”目录下,如下图所示: 在计算机的色彩图像
    发表于 09-01 10:45

    OpenCV库在图像处理和深度学习中的应用

    本文深入浅出地探讨了OpenCV库在图像处理和深度学习中的应用。从基本概念和操作,到复杂的图像变换和深度学习模型的使用,文章以详尽的代码和解释,带领大家步入
    的头像 发表于 08-18 11:33 505次阅读

    利用OpenCV进行颜色检测

    关于利用OpenCV进行颜色分类,本文包含了HSV介绍及应用、cv2.inRange及应用、RGB与HSV通道的区别三个方面。
    的头像 发表于 08-18 10:32 857次阅读
    利用<b class='flag-5'>OpenCV</b>进行<b class='flag-5'>颜色</b>检测

    iTOP-3568开发板使用OpenCV处理图像-颜色转换

    的源文件 code,转换的色彩空间,在 opencv 中有超过 150 种颜色空间转换方法,但是经常用的只有 BGR-灰度图和 BGR-HSV BGR 和灰度图的转换
    发表于 08-14 10:46

    IP库新增多种颜色转换空间IP简介

    颜色空间转换是图像及视频中常用的解决方案,涉及hsv-rgb、rgb-ycrcb等一些常见的颜色空间互相转换,今天带来几种常见的
    的头像 发表于 07-17 08:48 1110次阅读
    IP库新增多种<b class='flag-5'>颜色</b>转换<b class='flag-5'>空间</b>IP简介

    OpenCV图像的基本表示方法

    二值图像是指仅仅包含黑色和白色两种颜色图像。在计算机中,将白色像素点处理为“1”,将黑色像素点处理为“0”,以方便进行后续的存储和
    发表于 07-13 12:34 355次阅读

    Python OpenCV教程:特定颜色的检测

    在这篇OpenCV Python文章中,我想展示OpenCV中的基本颜色检测示例。 我们用颜色空间颜色
    的头像 发表于 07-03 10:30 648次阅读