颜色空间及其OpenCV实现是怎么样的

  介绍

颜色空间及其OpenCV实现是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

<节> <节> <节> <>强导读    

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


颜色空间及其OpenCV实现是怎么样的

文章内容包括:

  • 什么是颜色空间?
  • 颜色空间有哪些类别?
  • 如何在OpenCV中实现?
 

什么是颜色空间?

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

 

有哪些颜色空间的类型?

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

  1. RGB(Red Green Blue)
  2. HSL(Hue Saturation Lightness)
  3. HSV(Hue Saturation Value)
  4. YUV(Luminance, blue–luminance, red–luminance)
  5. CMYK(Cyan, Magenta, Yellow, Key)
 

RGB颜色空间:

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

颜色空间及其OpenCV实现是怎么样的

 

RGB颜色空间的Python实现:

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

hsl_img = cv2.cvtColor(X[0],cv2.COLOR_BGR2HLS)  #### CONVERTING BGR COLOR SPACE INTO HSL COLOR SPACE  ####
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,分别用于存储带有各自图像的标签,然后指定图像大小和路径目录。在这之后,我定义了两个函数,用于返回花类型(<强> assign_lable )和访问每个图像,读取和调整其大小(<强> make_train_data )。

 <代码> Z、X=[], [] 
IMG_SIZE=150
FLOWER_SUNFLOWER_DIR=& # 39; . ./输入/flowers-recognition/花/花/向日葵# 39;

def  assign_label (img, flower_type):
,,,, return  flower_type

def  make_train_data (flower_type DIR):
,,,, for  img 拷贝tqdm (os.listdir (DIR)):
,,,,,,,,标签=assign_label (img flower_type)
,,,,,,,, path =, os.path.join (DIR, img)
,,,,,,,, img =, cv2.imread(路径,cv2.IMREAD_COLOR)
,,,,,,,, img =, cv2.resize (img,, (IMG_SIZE IMG_SIZE)) # Resizing 从而形象
  ,

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

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

 <代码> make_train_data(& # 39;向日葵# 39;,FLOWER_SUNFLOWER_DIR),, # # # # # Loading  Sunflower 数据
fix_img =, cv2.cvtColor (X [0], cv2.COLOR_BGR2RGB),,,, # # # # # # # # # # # CONVERTING  BGR  COLOR  SPACE  INTO  RGB  COLOR  SPACE  # # # # # # # # #

颜色空间及其OpenCV实现是怎么样的