第14课 颜色识别
**学科:**人工智能年级: 七年级上**课题:**第14课时 颜色识别课时数:1教学目标:了解二值图像模式;知道使用OpenCV识别指定颜色的过程;了解findContours、drawContours函数各个参数的含义,能够使用findContours函数查找轮廓,使用drawContours绘制轮廓;教学重点:知道使用OpenCV识别指定颜色的过程;教...
**学科:**人工智能 | 年级: 七年级上 |
---|---|
**课题:**第14课时 颜色识别 | 课时数:1 |
教学目标:
了解二值图像模式;
知道使用OpenCV识别指定颜色的过程;
了解findContours、drawContours函数各个参数的含义,能够使用findContours函数查找轮廓,使用drawContours绘制轮廓;
教学重点:
知道使用OpenCV识别指定颜色的过程;
教学难点:
findContours、drawContours函数的使用;。
教学准备:
示例图片,程序代码文件(!!所有图片素材必须以英文命名)
教 学 过 程
一、开放导入
同学们,上节课我们学习了使用OpenCV模块的inRange函数提取指定颜色区域。
提取指定颜色区域的过程为:
1.读取图像
2.将图像转换为HSV模式
3.设定检测颜色范围
4.使用inRange函数将指定颜色变为白色,其它部分变为黑色
5.显示、保存提取后的图像
本节课我们来学习识别颜色,通过颜色识别,我们可以让无人驾驶汽车识别红绿灯、让分拣机器人分拣物品……
二、核心过程推进
识别颜色需要在提取颜色的基础上进行,识别颜色的过程为:
1.读取图像
2.将图像转换为HSV模式
3.设定检测颜色范围
4.使用inRange函数将指定颜色变为白色,其它部分变为黑色
5.将提取图像变为二值图像
6.使用findContours函数识别二值图像轮廓
7.使用drawContours函数在原图像上绘制轮廓
8.显示、保存识别后的图像
红色部分上节课已经学过,本节课我们从第5步开始学起
提取图像变为二值图像
二值图像是只有纯黑和纯白两种颜色颜色的图像,
# mask为提取颜色区域后的图像, binary为转换后的二值图像
ret, binary = cv2.threshold(mask ,127, 255, cv2.THRESH_BINARY)
使用findContours函数识别二值图像轮廓
findContours函数能够识别二值图像中白色区域的轮廓,并生成一个白色区域轮廓的坐标集。
# binary为二值图像,contours为生成的轮廓坐标集
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
使用drawContours函数在原图像上绘制轮廓
drawContours函数能够利用findContours函数生成的坐标点绘制出轮廓。
# img表示绘制轮廓的图像,contours为findContours函数生成的轮廓坐标集,(0, 0, 255)表示绘制轮廓线的颜色,3表示轮廓线的粗细
cv2.drawContours(img, contours, -1, (0, 0, 255), 3)
显示、保存图像
最后使用imshow函数显示图像,使用imwrite函数保存图像。
cv2.imshow('binary',binary) #显示转换后的二值图像
cv2.imshow("image", img) #显示识别后的图像
cv2.imwrite('Img.png', img) #将识别后的图像保存到当前目录
# 按任意窗口关闭
cv2.waitKey(0)
cv2.destroyAllWindows()
程序完整代码如下:
import cv2
import numpy as np
img = cv2.imread('color.jpg') #读取图像
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) #将图像转为hsv模式
# 设置检测的颜色范围(参看hsv颜色对照表)
min_hsv = np.array([26, 43, 46])
max_hsv = np.array([34, 255, 255])
# 利用inRange()函数和HSV模型中颜色范围的上下界,将原图像中的目标颜色变成白色255,其他部分变成黑色0。
mask = cv2.inRange(hsv, min_hsv, max_hsv)
# 将mask图像变成二值图像放在binary中
ret, binary = cv2.threshold(mask ,127, 255, cv2.THRESH_BINARY)
# 查找二值图像中白色区域的轮廓,并将轮廓坐标集存放到contours中
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 画出轮廓
cv2.drawContours(img, contours, -1, (0, 0, 255), 3)
cv2.imshow('binary',binary) #显示转换后的二值图像
cv2.imshow("image", img) #显示识别后的图像
cv2.imwrite('Img.png', img) #将识别后的图像保存到当前目录
# 按任意窗口关闭
cv2.waitKey(0)
cv2.destroyAllWindows()
三、开放延伸
1.通过本节课的学习,对于图片识别你有哪些收获呢?
2.修改代码,识别图片中蓝色区域。
更多推荐
所有评论(0)