**学科:**人工智能 | 年级: 七年级上 |
---|---|
**课题:**第09课 图像的算术运算 | 课时数:1课时 |
教学目标:
1、通过对图像算术的原理阐释,理解图像算术运算的实现过程。
2、能够对比分析两种不同图像加法运算实现的原理及效果。
3、理解不同图像的按位运算所实现的不同效果,并能搭配掩模运算实现简单的图像的掩码和按位运算的混合。
**教学重点:**图像的加法及混合算术运算实现过程与原理阐述
**教学难点:**理解图像的按位运算的原理
**教学准备:**Python编程软件、图像素材
教学过程
一、开放导入
一幅图像比较单调,如果有两幅图像,我们可以实现图像的叠加混合吗?那么如何实现呢?
平时我们做算术有加减乘除的操作,图像可以这么操作吗?
其实图像就是一般的矩阵,所以它们也可以做加减乘除。opencv可以将图像以不同的方式组合,opencv提供了各种图像算术操作符。如:加法:直接操作图像像素;调用加法函数add();
减法:subtract()乘法:multiply()除法:divide()等。本节课我们主要学习几种常用的图像处理算术运算,即加法运算,图像的混合和按位运算。下面就让我们一起来玩转图像,对不同的图像进行不同的算术运算吧!
二、核心过程推进
1**、图像的加法运算**
(1)OpenCV加法,调用函数 cv2.add() 将两幅大小、类型相同的图像进行加法运算。目标图像=cv2.add(图像1,图像2),运算结果是饱和运算。
当像素值<=255时,结果为“图像1+图像2”,例48+49=97
当像素值>255时,结果为255,例144+126=255
(2)使用numpy库进行图像加法运算,其运算方法是:
目标图像=图像1+图像2,运算结果进行取模运算。
当像素值<=255时,结果为“图像1+图像2”,例123+112=235
当像素值>255时,结果为对256取模的结果,例(144+126)%256=14
调试运行素材文件夹中“图像的加法运算.py”程序文件,查看运行效果,并比较两种图像加法运算的不同。
**练一练:**尝试一下将两幅不同的图像进行不同的加法运算,运行看一看显示的效果吧!
**总结:**相加的两幅图像类型、大小(高度/宽度/通道数)必须相同,格式可以不同,OpenCV 中的加法与 Numpy 的加法是有所不同的。OpenCV 的加法是一种饱和操作,而 Numpy 的加法是一种模操作。OpenCV 的结果会更好一点,故一般用Opencv对图像进行加法运算。
2**、图像的混合**
图像的混合,通常是将2张或2张以上的图像信息融合到1张图像上。这其实也是加法,但是不同的是两幅图像的权重不同,这就会给人一种混合或者透明的感觉。
图像混合是在图像加法的基础上增加了系数和亮度调节量,即
目标图像=图像1系数1+图像2系数2+亮度调节量,函数 cv2.addWeighted(img1,α,img2,β,γ) 就可以按下面的公式对图片进行混合操作。dst=α·img1+β·img2+γ
这里γ的取值为0,且不能省略。
**练一练:**现在我们可以尝试把两幅相同的或者两幅不同的图像以不同的权重系数混合在一起,可以实现非常酷的混合。如第一幅图的权重是 0.7,第二幅图的权重是 1,调试运行素材文件夹下的“图像的混合.py”,观察效果,改变不同的权重系数再调试运行试一试查看不同的效果吧。
**注意:**两张混合的图像一定要尺寸、通道数一致,格式可以不一致。
3**、图像的按位运算(与、或、异或、非)**
图像的按位操作以二进制方式操作。
(1)图像与运算:对二进制数据进行“与”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“与”操作,1&1=1,1&0=0,0&1=0,0&0=0,即有0则为0, 全为1则为1。 cv2.bitwise_and(src1, src2, dst=None, mask = None)
(2)图像或运算:对图像每个像素值进行二进制“或”操作,1|1=1,1|0=1,0|1=1,0|0=0,即有1则为1, 全为0则为0。
cv2.bitwise_or(src1, src2, dst=None, mask = None)
(3)图像异或运算:对图像每个像素值进行二进制“异或”操作,11=0,10=1,01=1,00=0,即不同为1, 相同为0。
cv2.bitwise_xor(src1, src2, dst=None, mask = None)
(4)图像非运算(取反):对图像每个像素值进行二进制“非”操作,1=0,0=1,即非0为1, 非1为0。
cv2.bitwise_not(src1, src2, dst=None, mask = None)
这四个运算,最少要有两个参数,即src1,src2;
dst:参数返回结果可选,mask:参数也是可选的,指定msk区域进行操作。
**练一练:**调试运行素材文件夹中“图像的按位运算.py”程序文件,查看不同图像的按位运算运行结果,思考说出不同运算效果有何不同?
在按位非运算中,
cv2.bitwise_not(img1)和 cv2.bitwise_not(img2)
实现的效果不同,尝试说出原因?
三、开放延伸
图像的按位运算一般会搭配掩模处理,掩膜(mask)就是用一幅二值化图片对另外一幅图片进行局部的遮挡。例如把一幅图像的logo标志放到另一幅图像上。
尝试运行素材文件夹中“图像的掩模处理.py”,查看结果,理解图像的按位运算与掩模处理的搭配使用过程。