opencv_day12

#使用函数cv2.pyrDown()对一幅图像进行向下采样,观察采样结果
#图像金字塔是一系列以以金字塔形状排列的,自底向上分辨率逐渐降低的图像集合
#cv2.pyrDown()首先对原始图像进行高斯滤波变换,以获取原始图像的近似图像,然后
#通过抛弃偶数行和偶数列来进行向下采样
import cv2
img=cv2.imread('./image/iu.jpeg',0)
r1=cv2.pyrDown(img)
r2=cv2.pyrDown(r1)
r3=cv2.pyrDown(r2)
print('img.shape=\n',img.shape)
print('r1.shape=\n',r1.shape)
print('r2.shape=\n',r2.shape)
print('r3.shape=\n',r3.shape)
cv2.imshow('original',img)
cv2.imshow('r1',r1)
cv2.imshow('r2',r2)
cv2.imshow('r3',r3)
cv2.waitKey()
cv2.destroyAllWindows()

输出:
img.shape=
(560, 700)
r1.shape=
(280, 350)
r2.shape=
(140, 175)
r3.shape=
(70, 88)
在这里插入图片描述

#使用函数cv2.pyrUp()对衣服图像进行向上采样,观察采样的结果
#对图像进行向上采样的时候,在每个像素的右侧,下方分别插入零值列和零值行
#然后使用高斯滤波对新图像进行滤波,得到向上采样的结果图像
import cv2
img=cv2.imread('./image/zaosheng.png',0)
r1=cv2.pyrUp(img)
r2=cv2.pyrUp(r1)
r3=cv2.pyrUp(r2)
print('img.shape=\n',img.shape)
print('r1.shape=\n',r1.shape)
print('r2.shape=\n',r2.shape)
print('r3.shape=\n',r3.shape)
cv2.imshow('original',img)
cv2.imshow('r1',r1)
cv2.imshow('r2',r2)
cv2.imshow('r3',r3)
cv2.waitKey()
cv2.destroyAllWindows()

输出:
img.shape=
(243, 322)
r1.shape=
(486, 644)
r2.shape=
(972, 1288)
r3.shape=
(1944, 2576)
在这里插入图片描述

#使用函数cv2.pyrDown()和函数cv2.pyrUp(),先后对一幅图像进行向下采样,向上采样
#,观察采样的结果及结果图像与原始图像的差异
import cv2
img=cv2.imread('./image/iu.jpeg')
down=cv2.pyrDown(img)
up=cv2.pyrUp(down)
#原始图像与先后经过向下采样,向上采样得到的结果图像,在大小上是相等的
#在外观上是相似的,但是他们的像素值并不一致
diff=up-img
print('img.shape=\n',img.shape)
print('up.shape=\n',up.shape)
cv2.imshow('original',img)
cv2.imshow('up',up)
cv2.imshow('diff',diff)
cv2.waitKey()
cv2.destroyAllWindows()

输出:
img.shape=
(560, 700, 3)
down.shape=
(560, 700, 3)
在这里插入图片描述

#与上面正好相反,先经过向上采样,再经过向下采样
import cv2
img=cv2.imread('./image/iu.jpeg')
up=cv2.pyrUp(img)
down=cv2.pyrDown(up)
#原始图像与先后经过向上采样,向下采样得到的结果图像,在大小上是相等的
#在外观上是相似的,但是他们的像素值并不一致
diff=down-img
print('img.shape=\n',img.shape)
print('down.shape=\n',down.shape)
cv2.imshow('original',img)
cv2.imshow('down',down)
cv2.imshow('diff',diff)
cv2.waitKey()
cv2.destroyAllWindows()

输出:
img.shape=
(560, 700, 3)
down.shape=
(560, 700, 3)
在这里插入图片描述

#使用函数cv2.pyrDown()以及函数cv2.pyrUp()构造拉普拉斯金字塔
import cv2
img=cv2.imread('./image/test2.jpeg')
G0=img
G1=cv2.pyrDown(G0)
G2=cv2.pyrDown(G1)
G3=cv2.pyrDown(G2)
L0=G0-cv2.pyrUp(G1)
L1=G1-cv2.pyrUp(G2)
L2=G2-cv2.pyrUp(G3)
print('L0.shape=\n',L0.shape)
print('L1.shape=\n',L1.shape)
print('L2.shape=\n',L2.shape)
cv2.imshow('original',img)
cv2.imshow('L0',L0)
cv2.imshow('L1',L1)
cv2.imshow('L2',L2)
cv2.waitKey()
cv2.destroyAllWindows()

输出:
在这里插入图片描述

#编写程序,使用拉普拉斯金字塔及高斯金字塔恢复原始图像
import cv2
import numpy as np
img=cv2.imread('./image/iu.jpeg')
G0=img
G1=cv2.pyrDown(G0)
L0=G0-cv2.pyrUp(G1)
R0=L0+cv2.pyrUp(G1)#通过拉普拉斯图像回复原始图像
print('img.shape=\n',img.shape)
print('R0.shape=\n',R0.shape)
result=R0-img#将img和R0做减法运算
#计算result的绝对值,避免求和时负负为正
result=abs(result)
#计算result所有元素的和
print('原始图像与恢复图像之间的差',np.sum(result))

输出:
img.shape=
(560, 700, 3)
R0.shape=
(560, 700, 3)
原始图像与恢复图像之间的差 0

#编写程序,使用拉普拉斯金字塔及高斯金字塔恢复高斯金字塔内的多层图像
#每一层原始图像与恢复图像都一样
import cv2
import numpy as np
img=cv2.imread('./image/BW.jpg')
#==============生成高斯金字塔==================
G0=img
G1=cv2.pyrDown(G0)
G2=cv2.pyrDown(G1)
G3=cv2.pyrDown(G2)
#===========生成拉普拉斯金字塔==============
L0=G0-cv2.pyrUp(G1)#拉普拉斯金字塔第0层
L1=G1-cv2.pyrUp(G2)
L2=G2-cv2.pyrUp(G3)
#=================复原G0====================
RG0=L0+cv2.pyrUp(G1)#通过拉普拉斯金字塔恢复原图像G0
print('G0.shape=\n',G0.shape)
print('RG0.shape=\n',RG0.shape)
result=RG0-G0
#计算result的绝对值时,避免求和时负负为正,1+(-1)=0
result=abs(result)
#计算result所有元素的和
print('原始图像G0与恢复图像RG0差值的绝对值和:',np.sum(result))
#=================复原G1====================
RG1=L1+cv2.pyrUp(G2)#通过拉普拉斯金字塔恢复原图像G0
print('G1.shape=\n',G1.shape)
print('RG1.shape=\n',RG1.shape)
result=RG1-G1
#计算result的绝对值时,避免求和时负负为正,1+(-1)=0
result=abs(result)
#计算result所有元素的和
print('原始图像G1与恢复图像RG1差值的绝对值和:',np.sum(result))
#=================复原G2====================
RG2=L2+cv2.pyrUp(G3)#通过拉普拉斯金字塔恢复原图像G0
print('G2.shape=\n',G2.shape)
print('RG2.shape=\n',RG2.shape)
result=RG2-G2
#计算result的绝对值时,避免求和时负负为正,1+(-1)=0
result=abs(result)
#计算result所有元素的和
print('原始图像G2与恢复图像RG2差值的绝对值和:',np.sum(result))

输出:
G0.shape=
(360, 360, 3)
RG0.shape=
(360, 360, 3)
原始图像G0与恢复图像RG0差值的绝对值和: 0
G1.shape=
(180, 180, 3)
RG1.shape=
(180, 180, 3)
原始图像G1与恢复图像RG1差值的绝对值和: 0
G2.shape=
(90, 90, 3)
RG2.shape=
(90, 90, 3)
原始图像G2与恢复图像RG2差值的绝对值和: 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值