Opencv第五章 新手入门之图像处理下(边界填充&像素的加减&图像融合)

边界填充

常见的边界填充,共有5种方式:
ORIGINAL 原图
REPLICATE 边缘复制  1111111|102354
REFLECT 反射 654321|123456
REFLECT101 反射1 12345|654321
WRAP 色块平移 123456|123456
CONSTANT 常数 111111|846317

五种方式各自有自己对应的边界填充代码

 ###############################################################

img=cv2.imread('E:\Anaconda\Anaconda3.8\Hia.jpg',cv2.IMREAD_GRAYSCALE)

top_size,bottom_size,left_size,right_size=(500,500,500,500)    注:500规定了边界填充的宽度
replicate=cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REPLICATE)
reflect=cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REFLECT)
reflect101=cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REFLECT_101)
wrap=cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_WRAP)
constant=cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_CONSTANT,value=0)

(代码供读者复制)

###############################################################

声明完成后我们通过图组的形式对五种不同的情况进行展示

############################################################### 

import matplotlib.pyplot as plt
plt.subplot(231),plt.imshow(img,'gray'),plt.title('ORIGINAL') 注:每一行plt对应着一个图片的输出
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()

(代码供读者复制)

###############################################################

像素的加减

像素加减的代码较为简单

img_Jiu=cv2.imread('E:\Anaconda\Anaconda3.8\Jiu.jpg')
img_Jiu[:5,:,0]
img_Jiu2=img_Jiu + 100
img_Jiu2[:5,:,0]

其中Jiu2是在Jiu图像的每个像素点上将其像素的值减去100

[:5,:,0]表示的是像素矩阵只展示前五行,我们来看一下两个图象分别的像素矩阵输出

大家会发现最后几列的数值反而变小了,这是什么原因导致的呢。我们在前面已经讲过图片像素的分布区间了,它的分布区间在[0-255] 所以凡是大于255的值就会被视为越界。以第一行最后一列的数值为例,我们给大家推导一下195是如何在加上100后变为39的。

195+100=295

295-256=39

故195在加上100后由于越界而得到了39。

我们来分别看一下效果图

原图 

 原图每个像素点加100像素所得图

图像融合

我们先导入两张图片

img_Jiu2=cv2.imread('E:\Anaconda\Anaconda3.8\Jiu(2).jpg')
img_Jiu3=cv2.imread('E:\Anaconda\Anaconda3.8\Jiu(3).jpg')

首先,想要融合两个图象,需要保证两个图片的尺寸必须相同,我们用img.shape来检查一下

发现两个图象的尺寸并不尽相同,因此我们需要通过代码对一张图片进行简单的剪裁使二者大小相等。

img_Jiu3=cv2.resize(img_Jiu3,(887,1920))
img_Jiu3.shape

 剪裁之后查看一下图片尺寸,发现已经与另一张完全相同。这个时候就可以开始融合图像操作了。

res2=cv2.addWeighted(img_Jiu2,0.4,img_Jiu3,0.6,100)
plt.imshow(res2)

其中0.4,0.6分别是img_Jiu2与img_Jiu3的权重,100是图像融合后的增强量,三者均是可易常数。

我们来看一下效果图:

最后再给大家补一个图像放缩的代码

res = cv2.resize(img,(0,0),fx=10,fy=10)
plt.imshow(res)

 

 

res = cv2.resize(img,(0,0),fx=10,fy=20)
plt.imshow(res)

两图不同的放缩形式一目了然。

这部分的内容就到这里了,下一张下大家介绍数值计算的相关问题。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值