雕爷学编程【雕爷学编程】MicroPython动手做(08)——零基础学MaixPy之识别颜色( 二 )
亮度(V:value):取值范围为0(黑色)~255(白色) 。
RGB转成HSV
设 (r, g, b) 分别是一个颜色的红、绿和蓝坐标 , 它们的值是在 0 到 1 之间的
实数 。 设 max 等价于 r, g 和 b 中的最大者 。 设 min 等于这些值中的最小者 。 要找到在 HSV 空间中的 (h, s, v) 值 , 这里的 h ∈ [0, 360)是角度的色相角 , 而 s, v ∈ [0,1] 是饱和度和亮度 。OpenCV下有个函数可以直接将RGB模型转换为HSV模型 , OpenCV中H∈ [0, 180) ,S ∈ [0, 255] ,V ∈ [0, 255] 。 我们知道H分量基本能表示一个物体的颜色 , 但是S和V的取值也要在一定范围内 , 因为S代表的是H所表示的那个颜色和白色的混合程度 , 也就说S越小 , 颜色越发白 , 也就是越浅;V代表的是H所表示的那个颜色和黑色的混合程度 , 也就说V越小 , 颜色越发黑 。 大致识别蓝色的取值是 H在100到140 , S和V都在90到255之间 。
本文插图
OpenCV颜色识别思路
1、创建滑动条:用来调节阈值 , 识别出不同颜色 。
2、颜色空间转换:将RGB转换为HSV模型 , 于是可以通过不同颜色的HSV的阈值不同来识别出该种颜色 。 Opencv中使用cvtcolor()可实现 。 一般彩色图像都是RGB颜色空间 , 而HSV色彩空间模型是一种在人们生活中甚至更常用的颜色系统 , 在电视遥控器上、在画画的调色板中、在看电视时调整亮度时都很常见 , 因为它更符合人们描述颜色的方式——是什么颜色、颜色有多深、颜色有多亮 。 需要注意的是 , 在opencv中 , H、S、V值范围分别是[0,180) , [0,255) , [0,255) , 而非实际模型[0,360] , [0,1] , [0,1] 。
3、直方图均衡化:由于光线的影响 , 手机读取的每一帧图片可能存在太亮或者太暗的问题 , 直方图均衡化可以将每个区间的像素点分布更均衡 , 使图像的层次感更强 。 Opencv中可以用equalizeHist()函数实现 。 直方图均衡化就是将原始的直方图拉伸 , 使之均匀分布在全部灰度范围内 , 从而增强图像的对比度 。 直方图均衡化的中心思想是把原始图像的的灰度直方图从比较集中的某个区域变成在全部灰度范围内的均匀分布
4、二值化:将图像上的像素点的灰度值设置为0或255 , 这样将使整个图像呈现出明显的黑白效果 。 对灰度图像进行二值化处理 , 可以突出一定范围的信息 。 它是将像素点颜色值在所设定区间内(如a-b)的设定为255 , 在范围外的设为0.但是对于ab和的不同取值 , 二值化的效果会有很大的不同 。
5、开操作:用来去除图像中的噪点 , 即干扰信息 。 Opencv中可以使用getStructuringElement()函数来进行相应设置 。 开操作是基于图像的膨胀和腐蚀而言的 , 膨胀就是对图像高亮部分进行“领域扩张” , 效果图拥有比原图更大的高亮区域;腐蚀是原图中的高亮区域被蚕食 , 效果图拥有比原图更小的高亮区域 。 而开操作是对图像先腐蚀再膨胀 , 用来消除小物体 。 其数学原理是定义一个卷积核B , 将其与目标图像进行卷积 , 就可以达到相应效果 。 不同形状和大小的核会出现不同的效果 。
6、闭操作 :进行开操作之后可能会有一些断开的区域 , 闭操作可以将这些未联通的区域进行封闭 , 使图像更完整 。 闭操作是开操作的相反 , 先膨胀再腐蚀 , 用于排除小型黑洞 , 其原理与开操作相同 。
手头正好有个魔方 , 有五种颜色 , 就拿它当识别颜色的实验道具了 。
本文插图
打开MaixPy IDE , 选择工具——机器视觉——阕值编辑器
推荐阅读
- 驱动之家Linux之父Linus Torvalds:我早就不编程了、工作就是说不
- 驱动之家 Torvalds:我早就不编程了、工作就是说不,Linux之父Linus
- Linux|Linux之父Linus Torvalds:我早就不编程了、工作就是说不
- 课工场郑州翔天信鸽|JavaScript最常用,java是主流,JetBrains公布编程语言排名
- 课工场郑州翔天信鸽 JavaScript最常用,java是主流,JetBrains公布编程语言排名
- 『程序员』程序员多次劝说邻居,不要让孩子去学编程,结果蒙了
- 「编程」后台编程语言互相争执,为何前端公认JavaScript?
- 编程猫受邀人民网参与讨论,共创智慧教育新生态
- java 编程思想:感动哭了!《Java 编程思想》最新中文版开源!(附源码)
- 鲸媒体|Jr计划拓展全球市场,印度少儿编程公司WhiteHat
