图像基本操作——图像边界填充和图像融合
⽂章⽬录
操作环境
python3.6+Pycharm/Jupyter Notebook
⼀、图像边界填充
有时候,对于图像进⾏处理的时候,需要对图像进⾏边界填充。
1. opencv边界填充函数说明
def copyMakeBorder(src: Any,
top: Any,
bottom: Any,
逐香尘left: Any,红豆古诗王维
right: Any,
borderType: Any,
dst: Any =None,
value: Any =None)->None
参数说明:
src:需要填充图像对象
top:顶部填充⼤⼩怎么改变手机字体
bottom:底部填充⼤⼩
left:左边填充⼤⼩
right:右边填充⼤⼩
borderType:填充⽅式
dst:填充后的对象,⼀般可以不填
value:⼀般⽤于常量填充设定数值
2. 填充⽅式说明
①cv2.BORDER_REPLICATE
复制法,复制最边缘的像素
②cv2.BORDER_REFLECT
反射法,对感兴趣的图像中的像素在两边进⾏复制,例如abcdefgh为原始的内容,进⾏反射后fedcba|abcdefgh|hgfedc
③cv2.BORDER_REFLECT_101
反射法,以最边缘的像素为轴,再向两边进⾏复制,例如abcdefgh为原始的内容,进⾏反射后gfedcb|abcdefgh|gfedcb
④cv2.BORDER_WRAP
咖啡的制作外包装法,例如abcdefgh为原始的内容,外包装后cdefgh|abcdefgh|abcdef
⑤cv2.BORDER_CONSTANT
常量法,⽤常量进⾏填充
3. 实际举例
代码内容
import cv2
import matplotlib.pyplot as plt
# 读取图⽚
img = cv2.imread("Lena.png")
# 设置填充边界的长度
top_size, bottom_size, left_size, right_size =(50,50,50,50)
# 复制法
replicate = pyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)
# 反射法
reflect = pyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REFLECT)
reflect = pyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REFLECT)
# 反射法
reflect101 = pyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REFLECT_101) # 外包装法
wrap = pyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_WRAP)
三藏经# 常量法,0表⽰⿊⾊
constant = pyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_CONSTANT, value=0) #绘制填充结果
# 231参数含义是2表⽰2⾏,3表⽰3列,1表⽰第⼀个
plt.subplot(231), plt.imshow(img,'gray'), plt.title('ORIGINAL')
plt.subplot(232), plt.imshow(replicate,'gray'), plt.title('REPLICATE')
plt.subplot(233), plt.imshow(reflect,'gray'), plt.title('REFLECT')
plt.subplot(234), plt.imshow(reflect101,'gray'), plt.title('REFLECT101')
plt.subplot(235), plt.imshow(wrap,'gray'), plt.title('WRAP')
plt.subplot(236), plt.imshow(constant,'gray'), plt.title('CONSTANT')
plt.show()
填充结果
通过⼏种填充⽅式的对⽐可以看出,⼏种⽅式填充效果都存在⼀些不⾜之处,造成图像有些扭曲,变形。
⼆、图像融合
将两种图像进⾏融合,按照⽐例进⾏叠加。
1. opencv实现图像融合的函数
def addWeighted(src1: Any,
alpha: Any,
src2: Any,
beta: Any,
第一单gamma: Any,
dst: Any =None,
dtype: Any =None)
参数说明:
src1, src2:需要融合相加的两个⼤⼩和通道数相等的图像对象
alpha:src1的权重
beta:src2的权重
gamma:叠加后的偏置,通常设置为0
dst=src1*alpha + src2*beta + gamma
2. 图像融合过程
①读取融合对象
# 导⼊相关包
import cv2
import matplotlib.pyplot as plt
#读取灰度图⽚
cat=cv2.imread("cat.jpg")
dog=cv2.imread("dog.jpg")
#显⽰图⽚,创建多个窗⼝
plt.subplot(121),plt.imshow(cat)
plt.subplot(122),plt.imshow(dog)
②处理融合对象
查看融合对象shape
cat.shape
词语接龙四字成语dog.shape
处理融合对象
size(cat,(591,394))
常⽤于实现图像的缩放,以及将图像更改为对应⼤⼩
使⽤⽅式
fx,fy表⽰横向和纵向变化的倍数
③进⾏融合
醉驾标准
res=cv2.addWeighted(cat,0.4,dog,0.6,0)
plt.imshow(res)
从融合的图像可以⽐较明显的看出猫和狗的轮廓。