**学科:**人工智能 | 年级: 七年级上 |
---|---|
**课题:**第13课时 提取特定颜色形状 | 课时数:1课时 |
学情分析:
学生在第六课时学习过图像模式转换rgb转hsv模式,对颜色模式有一定的认识但时间间隔较久,学生很多都已经遗忘,而本课提取特定颜色形状需要先将rgb模式转换为hsv模式,需要拿出时间复习相关知识。
教学目标:
1、复习将bgr转换hsv的相关知识。
2、了解常见颜色对应的hsv值范围
3、能够利用inrange函数提取所需颜色区域的黑白图像
4、并能利用bitwise_and函数将上述黑白图像恢复为原来的颜色
**教学重点:**inrange和bitwise_and函数的作用
教学难点:
1.将bgr转换为hsv
2.inrange和bitwise_and函数的作用
**教学准备:**装有opencv模块的Python编程环境
教 学 过 程
一、开放导入
回顾提问:rgb模式和hsv模式有什么区别?
RGB就是:红(Red)、绿(Green)、蓝(Blue)三种色光原色。RGB色彩模型的混色属于加法混色。每种原色的数值越高,色彩越明亮。 R、G、B都为0时是黑色,都为255时是白色。RGB是电脑设计中最直接的色彩表示方法。电脑中的24位真彩图像,就是采用RGB模型来精确记录色彩。所以,在电脑中利用RGB数值可以精确取得某种颜色。
HSV是把H(色相),S(饱和度),V(亮度)当做色值来定位颜色的空间。
色相的取值范围是0~360度,用来表示颜色的类别。其中红色是0度,绿色是120度,蓝色是240度。
饱和度的取值范围是0%~100%。用来表示颜色的鲜艳程度,灰色的饱和度是0%,纯粹的颜色(比如大红(255,0,0)青色(0,255,255)等等的饱和度是100%。
亮度的取值范围是0%[100%](https://www.baidu.com/s?wd=100%&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao),用来表示颜色的明暗程度,亮度为0%时为黑色,亮度为100%时为白色,介于0%100%之间时,则用来表示各个颜色的明暗程度。
简单来说:
RGB: 通过三原色的混合来产生不同的颜色效果,三原色分别由8bit定义,在硬件实现中便于理解和处理;(PS,其他颜色由三原色混合并不能说其他颜色就是混合光,比如黄光就是一种单色光,更合适的说法是“将三原色光以不同的比例复合后,对人的眼睛可以形成与各种频率的可见光等效的色觉")
HSV: 通过色度hue,亮度value,饱和度saturation来定义颜色,更接近人眼对颜色的定义(这是什么颜色?深浅如何?明暗如何?)
所以,在我们需要获取某张图片中相近连续颜色的图案时,需要将颜色转换为那种模式?
HSV模式(学生回答)。
二、核心过程推进
我们要提取上图中的蓝色图案,首先要将BGR模式转换为HSV模式
代码如下:
import cv2
import numpy as np
img = cv2.imread('opencv.jpg')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV) # 将BGR转为HSV模式
第二步,找到蓝色对应的HSV阈值,如下表所示:
[100,43,46]~[124,255,255]
设置阈值 代码如下:
lower_blue = np.array([100,43,46])
upper_blue = np.array([124,255,255])
利用inRange函数将蓝色区域的图像以黑白图像提取出来:
mask = cv2.inRange(hsv,lower_blue,upper_blue) # 将特定颜色区域变为白色,其余区域变为黑色
利用bitwise-and图像与运算,将特定区域恢复到原来颜色:
res = cv2.bitwise_and(img,img,mask= mask) # 将特定区域颜色恢复为原来颜色
最后,输出原图像,蓝色区域的黑白图像和最终结果:
cv2.imshow('img',img) # 原图像
cv2.imshow('mask',mask) # mask图像
cv2.imshow('res',res) # 最终结果
cv2.waitKey(0)
cv2.destroyAllWindows()
接下来,学生们尝试一下分别提取红色和绿色的图案:
1.先查找红色和绿色的HSV阈值
2.再结合提取蓝色图案的代码,进行修改
三、开放延伸
任务:尝试使用本节课所学的内容提取图1中的红苹果。
根据结果思考:能用上述方法提取特定颜色图案的图像具有什么特点?
要有较为清晰的颜色边界,图案当中不能杂糅多种颜色。