网上设计接单的网站,商标注册查询网官网查询,wordpress archive.php,wordpress的博文页面如何自定义【1】引言
前序已经学习了直接在画布上使用掩模#xff0c;会获得彩色图像的多种叠加效果#xff0c;相关文章链接为#xff1a;
python学opencv|读取图像#xff08;四十#xff09;掩模#xff1a;三通道图像的局部覆盖-CSDN博客
这时候如果更进一步#xff0c;直接…【1】引言
前序已经学习了直接在画布上使用掩模会获得彩色图像的多种叠加效果相关文章链接为
python学opencv|读取图像四十掩模三通道图像的局部覆盖-CSDN博客
这时候如果更进一步直接用两张图片互相叠加是否会有新的图像出现这就是本次文章想讨论的内容。
在更早的时候我们已经掌握了对灰度图像的掩模操作
python学opencv|读取图像九用numpy创建黑白相间灰度图_numpy生成全黑图片-CSDN博客
因此这种图片叠加的操作应该可以同时作用于灰度图像和彩色图像。
探索图像的叠加效果需要使用的函数是cv2.add()。
【2】官网教程
点击下述链接可以直达cv2.add()函数官网说明
OpenCV: Operations on arrays
官网页面关于cv2.add()函数的说明为 图1
具体的各个参数的意义为 void cv::add ( InputArray src1, #输入图像1 InputArray src2, #输入图像2 OutputArray dst, #输出图像2 InputArray mask noArray(), #掩模 int dtype -1 ) #输出图像的深度为默认值暂无需关注 【3】代码测试
【3.1】灰度图像
首先是引入cv2等模块和原始图像
import cv2 as cv # 引入CV模块
import numpy as np #引入numpy模块# 读取图片-直接转化灰度图
src cv.imread(srcf.png,0) #读取图像
dstsrc#输出图像
然后进行图形叠加操作
#图像叠加
dst1dstdst #图像使用“”叠加
dst2cv.add(dst,dst) #图像使用“cv.add()函数”叠加
然后在屏幕上展示图像
#在屏幕展示效果
cv.imshow(srcdst, dst) # 在屏幕展示效果
cv.imshow(srcdst1, dst1) # 在屏幕展示效果
cv.imshow(srcdst2, dst1) # 在屏幕展示效果
为探寻实际的叠加效果读取了特定像素点的BGR值
#显示BGR值
print(dst像素数为[258,258]位置处的BGR, dst[258, 258]) # 获取像素数为[100,100]位置处的BGR
print(dst1像素数为[258,258]位置处的BGR, dst1[258,258]) # 获取像素数为[100,100]位置处的BGR
print(dst2像素数为[258,258]位置处的BGR, dst2[258,258]) # 获取像素数为[100,100]位置处的BGR
print(dst像素数为[100,100]位置处的BGR, dst[100, 100]) # 获取像素数为[100,100]位置处的BGR
print(dst1像素数为[100,100]位置处的BGR, dst1[100,100]) # 获取像素数为[100,100]位置处的BGR
print(dst2像素数为[100,100]位置处的BGR, dst2[100,100]) # 获取像素数为[100,100]位置处的BGR
之后保存相关图像
#保存图像
cv.imwrite(srcf-dst.png, dst) # 保存图像
cv.imwrite(srcf-dst1.png, dst1) # 保存图像
cv.imwrite(srcf-dst2.png, dst2) # 保存图像cv.waitKey() # 图像不会自动关闭
cv.destroyAllWindows() # 释放所有窗口
本文使用的原始图像为 图2 原始图像
叠加后的图像效果为 图3 图像使用“”叠加-灰度图像 图4 图像使用“cv.add()函数”叠加-灰度图像
由图3和图4对比可见图4相对来说更亮。
这时候再看特定点的BGR值 图5 特定像素点BGR值-灰度图像
在像素点[258,258]获得的原始图像dst对应的BGR71dst1和dst2在该点对应的BGR1422*71可以明显看到使用“”叠加和“cv.add()函数”叠加的效果在本质上都是对该像素点的BGR值进行叠加。
在像素点[100,100]获得的原始图像dst对应的BGR156dst1在该点对应的BGR56dst2在该点对应的BGR255。实际上使用“”叠加和“cv.add()函数”叠加的效果在本质上都是对该像素点的BGR值进行叠加但对于使用“”叠加像素点BGR值超过255后会重新计数57156*2-255但由于像素点是从0开始计算所以第57个数对应的BGR值为56使用和“cv.add()函数”叠加像素点BGR值超过255后会直接截断为255。
【3.2】彩色图像
之后进行彩色图像的零值和反零值处理这只需要改一行代码将src cv.imread(srcun.png,0)改为 src cv.imread(srcun.png) #读取图像 直接输出完整代码
import cv2 as cv # 引入CV模块
import numpy as np #引入numpy模块# 读取图片-直接转化灰度图
src cv.imread(srcf.png) #读取图像
dstsrc#输出图像#图像叠加
dst1dstdst #图像使用“”叠加
dst2cv.add(dst,dst) #图像使用“cv.add()函数”叠加#在屏幕展示效果
cv.imshow(srcdst, dst) # 在屏幕展示效果
cv.imshow(srcdst1, dst1) # 在屏幕展示效果
cv.imshow(srcdst2, dst2) # 在屏幕展示效果#显示BGR值
print(dst像素数为[258,258]位置处的BGR, dst[258, 258]) # 获取像素数为[100,100]位置处的BGR
print(dst1像素数为[258,258]位置处的BGR, dst1[258,258]) # 获取像素数为[100,100]位置处的BGR
print(dst2像素数为[258,258]位置处的BGR, dst2[258,258]) # 获取像素数为[100,100]位置处的BGR
print(dst像素数为[100,100]位置处的BGR, dst[100, 100]) # 获取像素数为[100,100]位置处的BGR
print(dst1像素数为[100,100]位置处的BGR, dst1[100,100]) # 获取像素数为[100,100]位置处的BGR
print(dst2像素数为[100,100]位置处的BGR, dst2[100,100]) # 获取像素数为[100,100]位置处的BGR#保存图像
cv.imwrite(srcf-c-dst.png, dst) # 保存图像
cv.imwrite(srcf-c-dst1.png, dst1) # 保存图像
cv.imwrite(srcf-c-dst2.png, dst2) # 保存图像cv.waitKey() # 图像不会自动关闭
cv.destroyAllWindows() # 释放所有窗口
代码运行后获得的图像效果为 图6 图像使用“”叠加-灰度图像 图7 图像使用“cv.add()函数”叠加-彩色图像
此时的特定像素点BGR值为 图8 特定像素点BGR值-彩色图像
对像素点[258,258]和像素点[100,100]获得的原始图像dst对应的BGR和叠加后的图像dst1、dst2在该点对应的BGR分析可知使用“”叠加和“cv.add()函数”叠加的效果在本质上都是对该像素点的BGR值进行叠加但对于使用“”叠加像素点BGR值超过255后会重新计数使用和“cv.add()函数”叠加像素点BGR值超过255后会直接截断为255。 图9 对比效果
【4】细节说明
如果相互叠加的两个图像原本对应的BGR值分别为BGR1和BGR2使用“”叠加时重新计数的BGRBGR1BGR2-255-1。
【5】总结
掌握了pythonopencv实现各个像素点BGR叠加的技巧。