欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OpenCV图像金字塔

程序员文章站 2022-07-14 11:34:02
...

本文使用python实现。

图像金字塔

import cv2 as cv
import numpy as np


def pyramid_demo(image):    # 图像金字塔
    level = 3
    temp = image.copy()
    pyramid_images = []
    for i in range(level):
        dst = cv.pyrDown(temp)
        '''
        def pyrDown(src: Any,               # 降采样原图
            dst: Any = None,
            dstsize: Any = None,            # 见详解
            borderType: Any = None) -> None
        dstsize 这个参数指的是降采样之后的目标图像的大小,我们可以看出它是有默认值的,如果我们调用函数的时候不指定第三个参数,
        那么这个值是按照 Size((src.cols+1)/2, (src.rows+1)/2) 计算的。
        而且不管你自己如何指定这个参数,一定必须保证满足以下关系式:
            |dstsize.width * 2 - src.cols| ≤ 2;
            |dstsize.height * 2 - src.rows| ≤ 2;
        也就是说降采样的意思其实是把图像的尺寸缩减一半,行和列同时缩减一半。所以你指定的大小,无非就是多一行少一列的区别而已。
        在大多数情况下使用默认值就可了,因为这个函数不是缩减图像至任意尺寸,就只是缩减一半,所以没必要搞得那么复杂。
        '''
        pyramid_images.append(dst)
        cv.imshow("pyramid_down_"+str(i), dst)
        temp = dst.copy()
    return pyramid_images


src = cv.imread("C:/Users/admin/Pictures/Saved Pictures/15.jpg")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
pyramid_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

效果

OpenCV图像金字塔

拉普拉斯金字塔

def lapalian_demo(image):   # 拉普拉斯金字塔
    pyramid_images = pyramid_demo(image)
    level = len(pyramid_images)
    for i in range(level-1, -1, -1):
        if i-1 < 0:
            expand = cv.pyrUp(pyramid_images[i], dstsize=image.shape[:2])
            '''
            def pyrUp(src: Any,
                  dst: Any = None,
                  dstsize: Any = None,
                  borderType: Any = None) -> None
            '''
            lpls1 = cv.subtract(image, expand)
            '''
            def subtract(src1: Any,
                 src2: Any,
                 dst: Any = None,
                 mask: Any = None,
                 dtype: Any = None) -> None
            '''
            cv.imshow("lapalian_demo_" + str(i), lpls1)
        else:
            expand = cv.pyrUp(pyramid_images[i], dstsize=pyramid_images[i-1].shape[:2])
            lpls2 = cv.subtract(pyramid_images[i-1], expand)
            cv.imshow("lapalian_demo_"+str(i), lpls2)

OpenCV图像金字塔

 

相关标签: python