我是靠谱客的博主 正直御姐,最近开发中收集的这篇文章主要介绍利用OpenCV进行颜色检测HSV介绍利用cv2.inRange进行二值化处理RGB通道与HSV通道在颜色检测中的区别,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

利用OpenCV进行颜色检测

  • HSV介绍
  • 利用cv2.inRange进行二值化处理
    • cv2.inRange介绍
    • 代码示例
  • RGB通道与HSV通道在颜色检测中的区别

HSV介绍

HSV是相对RGB的另一种颜色表示方式,它相对RGB而言,是一种比较直观的颜色模型。其中颜色的参数分别是:色调(H),饱和度(S),明度(V)。

色调H:
用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,紫色为300°;
饱和度S:
饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。
明度V:
明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关,光照对此值影响最大。通常取值范围为0%(黑)到100%(白)。

代码:

OpenCV中由BGR转为HSV方法:
注意:OpenCV读取的图片格式为BGR格式,非RGB格式。

import cv2
img=cv2.imread('cat.jpg')
#读取一张图片
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
#利用cv2.cvtColor将图片进行格式转化
#转化类型为cv2.COLOR_BGR2HSV
cv2.imshow("hsv", hsv)
cv2.waitKey(0)    
cv2.destroyAllWindows()

原图:
在这里插入图片描述
处理后:
在这里插入图片描述

利用cv2.inRange进行二值化处理

cv2.inRange介绍

此函数可实现图像的二值化处理功能,这点类似之前提到过的threshold()函数,但是threshold()函数只能对单一通道进行二值化处理,而inRange()可以对多个通道进行操作。使用inRange处理之前,需要确定好两个数组,即图像上限和图像下限。

img = cv2.inRange(hsv, lower, upper)

第一个参数:hsv指的是原图
第二个参数:lower指的是图像中低于这个lower的值,图像值变为0
第三个参数:upper指的是图像中高于这个upper的值,图像值变为0

注意:如果传入的图像是彩色的,即三维数组图像,则lower与upper里面分别有三个元素,并且二者必须都是数组类型

(lower, upper) 两个数组参数可以作为一个范围,如果图像的像素点在这个范围之内,像素点就变成255(即白色),如果图像的像素点在这个范围之外,像素点就变为0(即黑色)。

处理完成之后,图像变为二值图像,想要的图像颜色变为白色,其他颜色变为黑色,之后可以专门针对白色进行处理。

代码示例

提取该图水杯部分(即黑色部分):

在这里插入图片描述

import cv2
img=cv2.imread('cat3.jpg')
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
lower=np.array([0,0,0])
upper=np.array([180,255,46])
#提前确定黑色的hsv范围
img_r=cv2.inRange(img,lower,upper)
cv2.imshow("img_r",img_r)
cv2.waitKey(0)
cv2.destroyAllWindows()

处理后:

在这里插入图片描述
由于猫耳朵与后面角落有部分黑色,并且杯子本身黑色不纯(存在白点),会产生噪点,需要后续进行处理,消去噪音点

RGB通道与HSV通道在颜色检测中的区别

如果光源不稳定,光照变化较大(存在阴影或者亮斑),则利用HSV通道检测就比RGB检测高效得多。光照变化较大时,对RGB三个色道的参数影响都很大,在实际调参过程中会显得非常麻烦,而且效果不理想。
HSV中,由于H是颜色的色调基本不受光照影响(即不受阴影或者亮斑影响),而V(明度)主要体现了颜色明亮程度,可以主要调试V来应对光源的变化,并且调试效果比RGB色道要可靠。

文:齐鲁工业大学 云灵未来人工智能协会 AIDC017

最后

以上就是正直御姐为你收集整理的利用OpenCV进行颜色检测HSV介绍利用cv2.inRange进行二值化处理RGB通道与HSV通道在颜色检测中的区别的全部内容,希望文章能够帮你解决利用OpenCV进行颜色检测HSV介绍利用cv2.inRange进行二值化处理RGB通道与HSV通道在颜色检测中的区别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(251)

评论列表共有 0 条评论

立即
投稿
返回
顶部