第08课 图像模式转换—RGB、HSV

**学科:**人工智能年级: 七年级上
**课题:**第08课 图像模式转换—RGB、HSV课时数:1课时

学情分析:

前面学生已经完全掌握了图像的读取、显示和保存的原理以及相应的函数调用,包括使用numpy库对图像进行基本的修改,在上一节课中学生也初步学习了图像转换为灰度和黑白图像的方法与步骤,这为本节课继续学习图像模式的另种转换方式HSV打下了较好的基础。

教学目标:

1.理解OpenCV中图像三通道的读取方式,比较分析BGR与RGB转换后的不同。

2.通过原理阐释,使学生了解HSV图像颜色识别的所具备优势,并掌握BGR图像转换为HSV图像的方法。

**教学重点:**OpenCV中图像模式的转换方法

**教学难点:**对比分析图像HSV与普通RGB图像的优缺点

**教学准备:**Python编程软件、图像素材


教学过程


一、开放导入

同学们都知道了一幅彩色图像是由三个通道组成的,这三个通道可以从一幅图像中单独拆分出来查看吗?大家想不想看看每个通道的图像颜色吗?

打开并运行素材文件夹中的“拆分合并图像通道.py”文件,查看显示效果,思考并理解如何将一幅图像的三个通道拆分出来,之后再如何进行合并。

二、核心过程推进

1**、OpenCV中图像通道的读取顺序(BGR转RGB)**

在OpenCV中如何查看一幅彩色图像各个通道的颜色呢?

我们可以采用numpy库通过设置其中两个通道的值为0,来查看第三个通道的颜色图像。

import cv2
import numpy as np
img = cv2.imread('xiaogou.bmp')
img[:,:,0] = 0 
img[:,:,1] = 0 # 使用numpy 将图像第一、第二个通道值设置为0 
cv2.imshow('img',img) #显示第三个通道图像颜色
cv2.imwrite('img1.bmp',img)#保存第三个通道图像
cv2.waitKey(0)

通过运行,大家会发现显示的第三个通道颜色是红色通道,但是正常的RGB图像中第三个通道应该是蓝色通道啊,这是为什么呢?
在这里插入图片描述

同样的道理,我们也可以通过修改第二和第三个通道的颜色值,查看另外第一个通道的颜色。

【总结】Opencv中读取图像的通道顺序是BGR

思考:

我们是否可以将OpenCV中BGR图像转换为RGB呢?

仍旧可以用我们上节课所用的图像颜色空间转换函数:cv2.cvtColor(img,cv2.COLOR_BGR2RGB)。

练习:

修改代码并运行,查看转换为RGB图像后的通道颜色与未转换前的效果有什么不同,说出原因?
在这里插入图片描述

**【注意】**OpenCV中BGR和RGB转换后图像的颜色也会改变,如果仅仅是在OpenCV中处理图像是不需要使用这个转换函数的,否则会改变图像原有的颜色。但是在其他库函数使用时,比如matplotlib,它读取图像的顺序是RGB,这时候就需要用到此转换函数将BGR转换为RGB,图像颜色才会读取正常。

2**、BGR转HSV图像**

H(色彩/色度),S(饱和度),V(亮度)

**思考:**比较RGB图像与HSV颜色图像有什么不同?

RGB通道并不能很好地反映出物体具体的颜色信息,

HSV空间能够非常直观的表达色彩的明暗,色调,以及鲜艳程度,方便进行颜色之间的对比。
在这里插入图片描述

在 OpenCV 的 HSV 格式中,通过上面的HSV空间各种颜色的范围表格我们可以了解HSV的取值范围:

H的取值范围是[0,180],

S的取值范围 [0,255],

V的取值范围 [0,255]。

读表格可知:绿色在HSV空间中H维度的范围为35~77, S维度范围为43255,V维度范围为46255。我们就可以用三维数组表示绿色的HSV范围,最低为[35,43,46],最高为[77,255,255]。这将对后面我们学习图像颜色的提取与识别中有很大的帮助。

注意:不同的软件使用的值可能不同。所以当你需要拿 OpenCV 的 HSV 值与其他软件的 HSV 值进行对比时,一定要记得归一化。

思考:

同BGR转换为RGB或Gray图像一样,我们是否也可以将OpenCV中BGR图像转换为HSV图像呢?

答案是肯定的,我们可以用如下的函数实现:

cv2.cvtColor(img,cv2.COLOR_BGR2HSV)。

练习:

修改并调试运行“BGR转HSV”Python文件,观察图像转化为HSV图像的效果。

import cv2
img = cv2.imread('1.jpg')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
cv2.imshow('img',img)  #原图像
cv2.imshow('hsv',hsv)  #hsv模式图
cv2.imwrite('hsv.bmp',hsv)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述
三、开放延伸

import cv2
img = cv2.imread('1.jpg')
rgb = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
hsv = cv2.cvtColor(rgb,cv2.COLOR_BGR2HSV)
cv2.imshow('hsv2',hsv)  
cv2.imwrite('hsv2.bmp',hsv)
cv2.waitKey(0)
cv2.destroyAllWindows()

同样都是转换为hsv模式,使用上面的代码,图像最后转换为HSV图像后会和上面转换成HSV图像不一致,是什么原因造成这种不同的?解释说明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值