**学科:**人工智能年级: 七年级上
**课题:**第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.修改代码,识别图片中蓝色区域。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐