opencv如何区分相近的颜色(opencv如何分别各种图片)

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

什么是色彩空间及其OpenCV实现?我相信很多没有经验的人都不知所措。为此,本文总结了问题产生的原因及解决方法。希望你能通过这篇文章解决这个问题。

导读

本文对图像的颜色空间进行了概念性的介绍,并通过代码将每个颜色空间的每个通道所代表的意义可视化。

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

文章内容包括:

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

什么是颜色空间?

颜色是一个连续的现象,这意味着有无数种颜色。然而,人类的眼睛和感知是有限的。因此,为了识别这些颜色,我们需要一种媒介或这些颜色的表示,这被称为颜色空间。在技术术语中,颜色模型或颜色空间是一个特定的三维坐标系和系统中的子空间,其中每种颜色都由一个点表示。

有哪些颜色空间的类型?

目前主要有五种颜色型号。不过我只写一些常见的(RGB、HSV、HSL)。

RGB(红绿蓝)HSL(色相饱和度明度)HSV(色相饱和度值)YUV(辉度,蓝辉度,红辉度)CMYK(青色、品红、黄色、调)

RGB颜色空间:

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

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

00-1010这里我们导入必要的库,cv2用于色彩空间转换,NumPy用于数组运算,Matplotlib用于显示图像,os用于访问图像目录,tqdm用于显示加载栏。

hsl_img=cv2.cvtColor(X[0],cv2。COLOR _ BGR2HLS)# # # # conversingbgrcolorspace intohslcolor 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 # # # #饱和度-零# # # ###

hsl_img_2[:2]=0

hsl_img_3[:0]=0 # # # # LIMITY-

nbsp;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'

def assign_label(img,flower_type):
    return flower_type

def make_train_data(flower_type,DIR):
    for img in tqdm(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))#Resizing the image

 

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

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

make_train_data('Sunflower',FLOWER_SUNFLOWER_DIR)  #####Loading Sunflower Data
fix_img = cv2.cvtColor(X[0],cv2.COLOR_BGR2RGB)    ###########CONVERTING BGR COLOR SPACE INTO RGB COLOR SPACE #########
new_img_1 = fix_img.copy() 
new_img_2 = fix_img.copy()
new_img_3 = fix_img.copy()
new_img_1[:,:,0] = 0 # making R channel zero    ####For BLUE channel#####
new_img_1[:,:,1] = 0 #making G channel zero
new_img_2[:,:,1] = 0####For RED color Channel####
new_img_2[:,:,2] = 0
new_img_3[:,:,0] = 0###For GREEN Channel####
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
for ax in axes:
    ax.imshow(list[i])
    i+=1

 

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

 

HSL颜色空间:

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

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

图2:HSL颜色空间
 

  

HSL颜色空间的Python实现:

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

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

 

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

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

 

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

 

HSV颜色空间:

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

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

图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实现是怎么样的


看完上述内容,你们掌握颜色空间及其OpenCV实现是怎么样的的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/147386.html

(1)

相关推荐

  • web前端实习生面试题有哪些

    技术web前端实习生面试题有哪些这篇文章主要介绍“web前端实习生面试题有哪些”,在日常操作中,相信很多人在web前端实习生面试题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”web

    攻略 2021年11月18日
  • java 核心技术卷1哪版比较好(java基本类型有哪八种)

    技术Java的五大功能优势是什么本篇内容主要讲解“Java的五大功能优势是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java的五大功能优势是什么”吧!  一、支持更多

    攻略 2021年12月21日
  • PPT中如何更改饼图的颜色

    技术PPT中如何更改饼图的颜色这篇文章给大家分享的是有关PPT中如何更改饼图的颜色的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。选择块区域:注意:选中时要点击2下才可以,点1下是全选了;然后用

    攻略 2021年11月1日
  • what引导的宾语从句,what引导的是什么从句

    技术what引导的宾语从句,what引导的是什么从句what引导名词从句(包括主语从句、宾语从句、表语从句、同位语从句)what引导的宾语从句,它在从句中可以作主语、宾语、表语、、定语、宾补。如:Whathesaidis

    生活 2021年10月27日
  • 蹚的意思,“赴汤蹈火”的意思是什么

    技术蹚的意思,“赴汤蹈火”的意思是什么“赴汤蹈火”的意思是:沸水敢蹚,烈火敢踏。比喻不避艰险,奋勇向前。赴汤蹈火 [ fù tāng dǎo huǒ ]:沸水敢蹚,烈火敢踏。比喻不避艰险,奋勇向前。(赴:走往;汤:热水;

    生活 2021年10月23日
  • MySQL优化经验是怎样的

    技术MySQL优化经验是怎样的MySQL优化经验是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。MySQL优化经验同时在线访问量继续增大 对于1G

    攻略 2021年11月17日