国外游戏代码网站,wordpress用多大的带宽,网站开发哪方面好做,title:(网站开发)【1】引言
前序学习过程中#xff0c;掌握了灰度图像和彩色图像的掩模操作#xff1a;
python学opencv|读取图像#xff08;九#xff09;用numpy创建黑白相间灰度图_numpy生成全黑图片-CSDN博客
python学opencv|读取图像#xff08;四十#xff09;掩模#xff1a;三…【1】引言
前序学习过程中掌握了灰度图像和彩色图像的掩模操作
python学opencv|读取图像九用numpy创建黑白相间灰度图_numpy生成全黑图片-CSDN博客
python学opencv|读取图像四十掩模三通道图像的局部覆盖-CSDN博客
也受此启发尝试直接使用cv2.add()函数让两张图片进行叠加
python学opencv|读取图像四十一 使用cv2.add()函数实现各个像素点BGR叠加-CSDN博客
在此基础上我们如果进一步尝试就可以对3张图片进行叠加。
比如我们已经知晓彩色三通道图像的每一个通道都可以单独设置对应BGR值它们叠加的效果是新的彩色图像。实际上这种叠加效果我们早期在没有使用cv2.add()函数的时候已经悄然获得了
python学opencv|读取图像十用numpy创建彩色图像_cv2 通过numpy创建图像-CSDN博客
此时在已经、学习了cv2.add()函数的基础上我们可以进一步验证。
【2】可行性分析
【2.1】未使用cv.add()函数
在python学opencv|读取图像十用numpy创建彩色图像_cv2 通过numpy创建图像-CSDN博客文章中使用的代码为
import numpy as np # 引入numpy模块
import cv2 as cv # 引入cv2模块
from imageio.v2 import imwrite# 定义图像
t np.arange(300, 600, 20) # 定义变量在[300,600)区间每隔20取一个值
t_max np.max(t) # 取变量最大值作为像素大小
print(t_max, t_max) # 输出最大值
image np.zeros([t_max, t_max, 3], np.uint8) # 定义一个竖直和水平像素均为t_max的全0矩阵
image[:, :, 0] 155 # 第一个通道值
image[:, :, 1] 200 # 第二个通道值
image[:, :, 2] 255 # 第三个通道值# 显示和保存定义的图像
cv.imshow(display-pho, image) # 显示图像
cv.imwrite(gray-pho-3.png, image) # 保存图像
cv.waitKey() # 图像不关闭
cv.destroyAllWindows() # 释放所有窗口
这其中的核心代码段有一个逐层覆盖和叠加的效果 image[:, :, 0] 155 # 第一个通道值
image[:, :, 1] 200 # 第二个通道值
image[:, :, 2] 255 # 第三个通道值 【2.2】使用cv.add()函数
为验证使用add()函数的叠加效果在上述代码后面补充一段代码
image1 np.zeros([t_max, t_max, 3], np.uint8) # 定义一个竖直和水平像素均为t_max的全0矩阵
image1[:, :, 0] 155 # 第一个图像
image2 np.zeros([t_max, t_max, 3], np.uint8) # 定义一个竖直和水平像素均为t_max的全0矩阵
image2[:, :, 1] 200 # 第二个图像
image3 np.zeros([t_max, t_max, 3], np.uint8) # 定义一个竖直和水平像素均为t_max的全0矩阵
image3[:, :, 2] 255 # 第三个图像
imgcv.add(image1,image2) # 第一和第二图像叠加
cv.imshow(display-12, img) # 显示图像
cv.imwrite(gray-pho-12.png, img) # 保存图像
imgcv.add(img,image3) # 第一、第二和第三图像叠加
cv.imshow(display-123, img) # 显示图像
cv.imwrite(gray-pho-123.png, img) # 保存图像
运行代码后获得的图像为 图1 gray-pho-3.png-未使用add()函数 图2 gray-pho-123.png-使用add()函数
由图1和图2可见无论是否使用add()函数图像叠加的本质都是各个通道的BGR值对应相加获得的图像效果是一样的。
此外中间的过渡图像也就是image1[:, :, 0] 155和image1[:, :,1] 200叠加后的图像为 图3 gray-pho-12.png-使用add()函数
【2.3】使用cv.add()函数掩模效果
在前述的两个测试中使用的图像叠加都没有尝试掩模效果。
但add()函数本身允许添加一个mask参数来做掩模效果为验证掩模效果继续增加下述代码
#验证掩模效果
masknp.zeros((t_max, t_max,1),np.uint8) # 定义一个竖直和水平像素均为t_max的全0矩阵
mask[20:300, 200:500, ] 200 # 第二个图像
cv.imshow(display-mask, mask) # 显示图像
cv.imwrite(gray-pho-mask.png,mask) # 保存图像
imgcv.add(image1,image2,maskmask) # 第一和第二图像叠加
cv.imshow(display-12-mask, img) # 显示图像
cv.imwrite(gray-pho-12-mask.png, img) # 保存图像
这里应用掩模效果的核心代码为 imgcv.add(image1,image2,maskmask) # 第一和第二图像叠加 代码运行后的掩模效果为 图4 gray-pho-12-mask.png-使用add()函数
由图4可见图像只在使用掩模的区域进行了效果叠加其他区域仍然保留了全0矩阵对应的纯黑色画布特点。
因为刚好掩模的矩阵赋值也是200和image2的通道赋值一样为进一步测试把这个掩模的矩阵赋值改到255增加下述代码
mask1np.zeros((t_max, t_max,1),np.uint8) # 定义一个竖直和水平像素均为t_max的全0矩阵
mask1[20:300, 200:500, ] 255 # 第二个图像
cv.imshow(display-mask, mask1) # 显示图像
cv.imwrite(gray-pho-mask.png,mask1) # 保存图像
imgcv.add(image1,image2,maskmask1) # 第一和第二图像叠加
cv.imshow(display-123-mask, img) # 显示图像
cv.imwrite(gray-pho-123-mask.png, img) # 保存图像
此时获得的图像为 图5 gray-pho-mask.png-掩模 图6 gray-pho-123-mask.png-使用add()函数掩模
可见使用掩模效果后图像依然是image1image2的效果且只在掩模控制的区域显示这个叠加效果。
此时的完整代码为
import numpy as np # 引入numpy模块
import cv2 as cv # 引入cv2模块
from imageio.v2 import imwrite# 定义图像
t np.arange(300, 600, 20) # 定义变量在[300,600)区间每隔20取一个值
t_max np.max(t) # 取变量最大值作为像素大小
print(t_max, t_max) # 输出最大值
image np.zeros([t_max, t_max, 3], np.uint8) # 定义一个竖直和水平像素均为t_max的全0矩阵
image[:, :, 0] 155 # 第一个通道值
image[:, :, 1] 200 # 第二个通道值
image[:, :, 2] 255 # 第三个通道值# 显示和保存定义的图像
cv.imshow(display-pho, image) # 显示图像
cv.imwrite(gray-pho-3.png, image) # 保存图像image1 np.zeros([t_max, t_max, 3], np.uint8) # 定义一个竖直和水平像素均为t_max的全0矩阵
image1[:, :, 0] 155 # 第一个图像
image2 np.zeros([t_max, t_max, 3], np.uint8) # 定义一个竖直和水平像素均为t_max的全0矩阵
image2[:, :, 1] 200 # 第二个图像
image3 np.zeros([t_max, t_max, 3], np.uint8) # 定义一个竖直和水平像素均为t_max的全0矩阵
image3[:, :, 2] 255 # 第三个图像
imgcv.add(image1,image2) # 第一和第二图像叠加
cv.imshow(display-12, img) # 显示图像
cv.imwrite(gray-pho-12.png, img) # 保存图像
imgcv.add(img,image3) # 第一、第二和第三图像叠加
cv.imshow(display-123, img) # 显示图像
cv.imwrite(gray-pho-123.png, img) # 保存图像#验证掩模效果
masknp.zeros((t_max, t_max,1),np.uint8) # 定义一个竖直和水平像素均为t_max的全0矩阵
mask[20:300, 200:500, ] 200 # 第二个图像
cv.imshow(display-mask, mask) # 显示图像
cv.imwrite(gray-pho-mask.png,mask) # 保存图像
imgcv.add(image1,image2,maskmask) # 第一和第二图像叠加
cv.imshow(display-12-mask, img) # 显示图像
cv.imwrite(gray-pho-12-mask.png, img) # 保存图像mask1np.zeros((t_max, t_max,1),np.uint8) # 定义一个竖直和水平像素均为t_max的全0矩阵
mask1[20:300, 200:500, ] 255 # 第二个图像
cv.imshow(display-mask, mask1) # 显示图像
cv.imwrite(gray-pho-mask.png,mask1) # 保存图像
imgcv.add(image1,image2,maskmask1) # 第一和第二图像叠加
cv.imshow(display-123-mask, img) # 显示图像
cv.imwrite(gray-pho-123-mask.png, img) # 保存图像cv.waitKey() # 图像不关闭
cv.destroyAllWindows() # 释放所有窗口
【3】总结
掌握了使用pythonopencv实现使用cv2.add()函数进行多图像叠加的技巧并探索了掩模的影响。