opencv–颜色识别

目录


一、主要函数介绍

通常,相机在RGB颜色模式下工作,但这种模式受到光线的影响较大,所以在opencv中,用HSV(色彩、饱和度、亮度)模型对颜色进行定义。

除此之外,opencv中有多种色彩空间,包括 RGB、HSI、HSL、HSV、HSB、YCrCb、CIE XYZ、CIE Lab8种,使用中经常要遇到色彩空间的转化。

可以使用opencv中cv2.cvtColor()函数来改变图像的颜色空间,该函数形式为:

                                                cv2.cvtColor(frame,flag)

参数介绍:

@frame    为要进行处理的图片;

@flag       为要进行的色彩转换方式;

对于BGR<–>Gray的转换,我们用的flag就是cv2.COLOR_BGR2GRAY

对于BGR<–>HSV的转换,我们用的flag就是cv2.COLOR_BGR2HSV

 二、颜色识别

我们对于颜色的转换主要是通过BGR<–>HSV的形式,所以我们进行颜色识别之前,还是要首先获取RGB的数值,该数值可以用Inkscape工具进行抓取。 

Draw Freely | InkscapeInkscape is professional quality vector graphics software which runs on Linux, Mac OS X and Windows desktop computers.https://inkscape.org/Inkscape工具官网:Draw Freely | Inkscape

我们通过命令窗口,输入命令和BGR的值,就可以得到HSV的上下范围值。然后打开colorDetection.py文件,我们把得到的上下范围值数据更改一下,

lower_range = np.array([24, 100, 100], dtype=np.uint8)
upper_range = np.array([44, 255, 255], dtype=np.uint8)

 三、其他相关函数介绍

1. cv2.resize

img = cv2.resize(img, (0,0), fx=0.2, fy=0.2)

该函数是opencv库中的一个函数,主要起到对图片进行缩放的作用

参数介绍:

resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )

  InputArray src :输入,原图像,即待改变大小的图像;

  OutputArray dst:输出,改变后的图像。这个图像和原图像具有相同的内容,只是大小和原图像不一样而已;

  dsize:输出图像的大小,将原图片转化为宽和长分别为x,y的图片

  fx和fy是图像width方向和height方向的缩放比例。

  fx:width方向的缩放比例

  fy:height方向的缩放比例

  如果fx=0.2,fy=0.2,则将原图片的x轴缩小为原来的0.2倍,将y轴缩小为原来的0.2倍

  interpolation(插值):这个是指定插值的方式,图像缩放之后,肯定像素要进行重新计算的,就靠这个参数来指定重新计算像素的方式,有以下几种:

  INTER_NEAREST – 最邻近插值

  INTER_LINEAR – 双线性插值,如果最后一个参数你不指定,默认使用这种方法

  INTER_CUBIC – 4×4像素邻域内的双立方插值

  INTER_LANCZOS4 – 8×8像素邻域内的Lanczos插值

更详细的介绍可以看这篇博客:

cv2.resize()原理详解_AI bro的博客-CSDN博客_cv2.resize

2. np.array(x,dtype)

将x转化为一个类型为type的数组

3. cv2.inRange()

作用:通过设置阈值,去除背景部分

mask = cv2.inRange(hsv, lower_range, upper_range)

  第一个参数:hsv指的是原图

  第二个参数:lower_range,指的是图像中低于这个lower_range的值,图像值变为0

  第三个参数:upper_range指的是图像中高于这个upper_range的值,图像值变为0

  而在lower_range~upper_range之间的值变成255。

4. cv2.imshow()

作用:在窗口中显示图像。该窗口和图像的原始大小自适应(自动调整到原始尺寸)。

第一个参数是一个窗口名称(也就是我们对话框的名称),它是一个字符串类型。第二个参数是我们的图像。您可以创建任意数量的窗口,但必须使用不同的窗口名称。

cv2.imshow('mask',mask)
cv2.imshow('image', img)

5.cv2. waitKey()

功能是等待用户的按键响应(可以不断刷新图像),频率时间为delay,单位为ms 返回值为当前键盘按键值。如果用户没有按下键,则继续等待(循环)

常见:设置waitKey(0),则表示程序会无限制的等待用户的按键事件。

if cv2.waitKey(100)==27:

#特定的100ms print(‘wait 100 ms’)

等待用户触发事件,等待时间为100ms,如果在这个时间段内,用户按下ESC(ASCII码为27),执行 if体如果没有按,if函数不做处理

waitKey()函数与imshow()函数之间的关系:

在使用中,imshow函数后面通常都会跟着waitKey 函数。waitKey控制着imshow的持续时间,当imshow之后不跟waitKey时,相当于没有给imshow提供时间展示图像,所以只有一个空窗口一闪而过。添加了waitKey后,图像将会有一个显示的时间,而不会一闪而过。

更详细的介绍可以看这篇博客:

https://blog.csdn.net/chengfenglee/article/details/112251358

运行之后就可以得到图片掩膜处理之后的图像。也就是说我们要找的黄色已经被找到并且做了处理。

四、掩膜

掩膜主要用于:

①提取感兴趣区,用预先制作的感兴趣区掩模与待处理图像相乘,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0。例如,我们要检测一幅图像中眼睛的位置,我们首先要在图像中找到脸,再在脸的区域中找到眼睛,而不是直接在一幅图像中搜索。

②屏蔽作用,用掩模对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计。

③结构特征提取,用相似性变量或图像匹配方法检测和提取图像中与掩模相似的结构特征。

④特殊形状图像的制作。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年5月24日
下一篇 2023年5月24日

相关推荐