zoukankan      html  css  js  c++  java
  • opencv_python学习笔记十七

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

  • 相关阅读:
    PAT (Basic Level) Practise:1001. 害死人不偿命的(3n+1)猜想
    流加密法
    The NMEA 0183 Protocol
    USB 描述符
    网摘
    What are the 10 algorithms one must know in order to solve most algorithm challenges/puzzles?
    Why did Jimmy Wales invest in Quora? Is he afraid that it will take over Wikipedia?
    Add Binary
    Cocos2d-x 网络资源
    Cache
  • 原文地址:https://www.cnblogs.com/retacn-yue/p/6194159.html
Copyright © 2011-2022 走看看