最大的地方门户网站源码,肇庆免费模板建站,如何设计一个小程序,2021百度新算法优化【1】引言
前序学习了图像的得加方法#xff0c;包括使用add()函数直接叠加BGR值、使用bitwise()函数对BGR值进行按位计算叠加和使用addWeighted()函数实现图像加权叠加至少三种方法。文章链接包括且不限于#xff1a;
python学opencv|读取图像#xff08;四十二#xff…【1】引言
前序学习了图像的得加方法包括使用add()函数直接叠加BGR值、使用bitwise()函数对BGR值进行按位计算叠加和使用addWeighted()函数实现图像加权叠加至少三种方法。文章链接包括且不限于
python学opencv|读取图像四十二使用cv2.add()函数实现多图像叠加-CSDN博客
python学opencv|读取图像四十九使用cv2.bitwise()系列函数实现图像按位运算-CSDN博客
python学opencv|读取图像五十使用addWeighted()函数实现图像加权叠加效果-CSDN博客
这些方式都是实现图片的整体叠加如果有时候想实现局部覆盖就需要新的方法这就是本文的学习目标。
【2】可行性分析
实现局部覆盖本质上是改变了图像局部像素点上的BGR值所以从更改BGR值的角度这个目标可行。
首先引入一张图像然后从另一个图像里截取部分图像的BGR值形成第三个图再把第三个图盖到第一个图像上就可以。
【3】代码测试
按照前述可行性分析思路先引入相关模块和初始图像
import cv2 as cv # 引入CV模块
import numpy as np #引入numpy模块# 读取图片
srcx cv.imread(srcx.png) #读取图像srcx.png
srcp cv.imread(srcp.png) #读取图像srcp.png
rowsx,colsx,cansxsrcx.shape #读取图像属性
rowsp,colsp,canspsrcp.shape #读取图像属性
print(srcx的图像属性为,srcx.shape)
print(srcp的图像属性为,srcp.shape)
代码引入了两个图像srcx.png和srcp.png并且对图像的基本属性进行了读取。
之后先截取第二张图像的部分像素区域
#截取部分图像
srcp0srcp[int(0.5*rowsp):int(0.8*rowsp),int(0.2*colsp):int(0.6*colsp),:]
rowsp0,colsp0,cansp0srcp0.shape #读取图像属性
print(srcp0的图像属性为,srcp0.shape)
之后用上一步截取的图像直接覆盖到srcx.png上
#srcx的部分像素点BGR值被srcp0覆盖
srcx[int(0.5*rowsx):int(0.5*rowsx)rowsp0,int(0.26*colsx):int(0.26*colsx)colsp0,:]srcp0
这里使用的是等大的像素区域使用截取BGR值覆盖原有BGR值。
然后直接输出图像
#显示和保存图像
cv.imshow(srcx,srcx) #显示图像
cv.imwrite(srcx0.png,srcx) #保存图像
cv.imshow(srcp,srcp) #显示图像
cv.imshow(srcp0,srcp0) #显示图像
cv.imwrite(srcp0.png,srcp0) #保存图像cv.waitKey() # 图像不关闭
cv.destroyAllWindows() # 释放所有窗口
代码运行使用的图像有 图1 第一张图像srcx.png 图2 第二张图像srcp.png
截取后的部分图像为 图3 截取图像srcp.png
使用BGR覆盖后获得的叠加图像效果为 图4 截取图像BGR覆盖叠加图像srcx0.png
由图4可见截取图像BGR覆盖叠加第一张图像后获得的srcx0.png 相对于初始图像srcx.png完全覆盖了部分区域。
此时获得的图像基本属性读取数据为 图5 读取图像属性值
图5展示的图像基本属性值给出了第一张初始图像srcx.png和第二张初始图像srcp.png的像素值之外还给出了截取图像srcp0.png的像素值。
【4】细节说明
进行BGR值覆盖时应注意像区域的划分 图6 像素区域划分
如图6所示像素区域划分过程中
a.应保证像素其实点保持一致如行的起始都是0.5*rows列的起始都是0.25*cols因为只有这样才能保证BGR覆盖的区域和截取的图像等大
b.应确保像素值都是整数不确定的时候就用int()强行转化。
此时的完整代码为
import cv2 as cv # 引入CV模块
import numpy as np #引入numpy模块# 读取图片
srcx cv.imread(srcx.png) #读取图像srcx.png
srcp cv.imread(srcp.png) #读取图像srcp.png
rowsx,colsx,cansxsrcx.shape #读取图像属性
rowsp,colsp,canspsrcp.shape #读取图像属性
print(srcx的图像属性为,srcx.shape)
print(srcp的图像属性为,srcp.shape)#截取部分图像
srcp0srcp[int(0.5*rowsp):int(0.8*rowsp),int(0.2*colsp):int(0.6*colsp),:]
rowsp0,colsp0,cansp0srcp0.shape #读取图像属性
print(srcp0的图像属性为,srcp0.shape)#srcx的部分像素点BGR值被srcp0覆盖
srcx[int(0.5*rowsx):int(0.5*rowsx)rowsp0,int(0.26*colsx):int(0.26*colsx)colsp0,:]srcp0#显示和保存图像
cv.imshow(srcx,srcx) #显示图像
cv.imwrite(srcx0.png,srcx) #保存图像
cv.imshow(srcp,srcp) #显示图像
cv.imshow(srcp0,srcp0) #显示图像
cv.imwrite(srcp0.png,srcp0) #保存图像cv.waitKey() # 图像不关闭
cv.destroyAllWindows() # 释放所有窗口
【5】总结
掌握了使用pythonopencv使用BGR值覆盖的方式实现图像叠加效果的技巧。