opencv_python學習筆記十七

20 圖像金字塔python

高斯金字塔app

拉普拉斯金字塔函數

所用函數:spa

def pyrDown(src, #輸入圖像ip

dst=None, #輸出圖像utf-8

dstsize=None, #輸出圖像的大小it

borderType=None)#圖像邊界的處理方式io

def pyrUp(src, class

dst=None, test

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()

相關文章
相關標籤/搜索