您的位置:首页 > 编程语言 > Python开发

opencv_python学习笔记十七

2016-11-21 16:34 525 查看
20
图像金字塔


高斯金字塔

拉普拉斯金字塔

所用函数:

def
pyrDown(src,
#输入图像

dst=None,
#输出图像

dstsize=None,
#输出图像的大小

borderType=None)#图像边界的处理方式

def
pyrUp(src,

dst=None,

dstsize=None,

borderType=None)

1
原理

示例代码如下:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Time : 2016/11/21 14:01

# @Author : Retacn

# @Site :
图像金字塔

# @File : imagePyr.py

# @Software: PyCharm

import
cv2

import
numpy
as
np,sys

from
matplotlib
import
pyplot
as
plt

img=cv2.imread('../test.jpg',0)

lower_reso=cv2.pyrDown(img)

higher_reso=cv2.pyrUp(img)

plt.subplot(131),plt.imshow(img,'gray')

plt.title('Original')

#,plt.xticks([]),plt.yticks([])

plt.subplot(132),plt.imshow(lower_reso,'gray')

plt.title('Lower_reso')

#,plt.xticks([]),plt.yticks([])

plt.subplot(133),plt.imshow(higher_reso,'gray')

plt.title('Higher_reso')

#,plt.xticks([]),plt.yticks([])

plt.show()

2
使用金字塔进行图像融合

示例代码如下:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Time : 2016/11/21 14:44

# @Author : Retacn

# @Site :
图像融合

# @File : ImageFusion.py

# @Software: PyCharm

import
cv2

import
numpy
as
np,sys

from
matplotlib
import
pyplot
as
plt

"""

使得img1的大小与img2相同

"""

def
sameSize(img1, img2):

rows, cols, dpt = img2.shape

dst = img1[:rows,:cols]

return
dst

#读入图像

apple=cv2.imread('../apple.jpg')

orange=cv2.imread('../orange.jpg')

#为图像苹果创建一个高斯金字塔

temp_c=apple.copy()

apple_gp=[temp_c]

for
i
in
range(6):

temp_c=cv2.pyrDown(temp_c)

apple_gp.append(temp_c)

#为图像橙子创建一个高斯金字塔

temp_c=orange.copy()

orange_gp=[temp_c]

for
i
in
range(6):

temp_c=cv2.pyrDown(temp_c)

orange_gp.append(temp_c)

#为图像苹果创建一个拉普拉斯金字塔

apple_lp=[apple_gp[5]]

for
i
in
range(5,0,-1):

GE=cv2.pyrUp(apple_gp[i])

L=cv2.subtract(apple_gp[i-1],sameSize(GE,apple_gp[i-1]))

apple_lp.append(L)

#为图像橙子创建一个拉普拉斯金字塔

orange_lp=[orange_gp[5]]

for
i
in
range(5,0,-1):

GE=cv2.pyrUp(orange_gp[i])

L=cv2.subtract(orange_gp[i-1],sameSize(GE,orange_gp[i-1]))

orange_lp.append(L)

#1/2 Laplace金字塔进行拼接

LS=[]

for
apple_l,orange_l
in
zip(apple_lp,orange_lp):

rows,cols,dpt=apple_l.shape

ls = np.hstack((apple_l[:,0:cols/2],
orange_l[:,cols/2:]))

LS.append(ls)

#对拼接后的laplace金字塔重建,取得融合后的图像

ls_=LS[0]

for
i
in
range(1,6):

ls_=cv2.pyrUp(ls_)

ls_=cv2.add(sameSize(ls_,LS[i]),LS[i])

real=np.hstack((apple[:,:cols/2],orange[:,cols/2:]))

#保存图像

#cv2.imwrite('Pyramid_blending2.jpg',ls)

#cv2.imwrite('Direct_blending.jpg',real)

#显示图像

plt.subplot(121),plt.imshow(ls_,'gray')

plt.title('ls_')

plt.subplot(122),plt.imshow(real,'gray')

plt.title('real')

plt.show()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: