OpenCV——12图像金字塔
图像金字塔
- 图像金子塔原理
- 高斯金字塔与拉普拉斯金字塔
1.高斯图像金子塔
- reduce = 高斯模糊+降采样
- expand = 扩大+卷积
2.拉普拉斯金字塔
- L i = g i − E x p a n d ( g 2 ) L_i = g_i-Expand(g2) Li=gi−Expand(g2)
# -*- coding:utf-8 -*-
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)
pyramid_images.append(dst)
# cv.imshow("pyramid_down_"+str(i), dst)
temp = dst.copy()
return pyramid_images
def laplace_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])
lpl = cv.subtract(image, expand)
cv.imshow("laplace_up_"+str(i), lpl)
else:
expand = cv.pyrUp(pyramid_images[i], dstsize=pyramid_images[i-1].shape[:2])
lpl = cv.subtract(pyramid_images[i-1], expand)
cv.imshow("laplace_up_"+str(i), lpl)
# 读取图片
src = cv.imread("D:\Python\Projects\OpenCV_toturial\images\lena.png")
# 创建opencv的GUI窗口
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
# 将图片放入指定名字的窗口中显示出来
cv.imshow("input image", src)
# pyramid_demo(src)
laplace_demo(src)
# 设置waitKey中的delay为0,程序会等待用户操作后关闭窗口
cv.waitKey(0)
cv.destroyAllWindows()
高斯图像金字塔结果:
拉普拉斯金子塔结果:
注意:拉普拉斯金字塔时,图像大小必须是
2
n
∗
2
n
2^n*2^n
2n∗2n,不然会报错