今天简单学习下图像金字塔,说白了就是图像放大缩小的一些方法,但是是等比例的。
import cv2
import numpy as np
# 展示图像,封装成函数
def cv_show_image(name, img):
cv2.imshow(name, img)
cv2.waitKey(0) # 等待时间,单位是毫秒,0代表任意键终止
cv2.destroyAllWindows()
# 图像金字塔,上面的size小,下面的size大
# 比如一个图像的shape是(H,W)
# 那么金字塔上面一层就是(1/2 * H, 1/2 * W)
# 那么金字塔再上面一层就是(1/4 * H, 1/4 * W)
# 那么金字塔再上面一层就是(1/8 * H, 1/8 * W)
# 那么金字塔再上面一层就是(1/16 * H, 1/16 * W)
# 这个是个缩小的过程,方法就是,先用高斯核进行卷积,让每个像素点都是含有临近像素的一些信息,再去掉所有的偶数的行和列
# 这个过程叫做下采样,缩小了
# 同样的道理,上采样就是图像变大了。
# 那么金字塔下一层就是(2*H, 2*W)
# 那么金字塔再下一层就是(4*H, 4*W)
# 那么金字塔再下一层就是(8*H, 8*W)
# 比如扩大两倍[[10, 20], [30, 40]] ===>>> [[10, 0, 20, 0],[0, 0, 0, 0],[30, 0, 40, 0],[0, 0, 0, 0]]
img = cv2.imread('images/saoge.jpg', cv2.IMREAD_GRAYSCALE)
print(img.shape) # (337, 600)
up = cv2.pyrUp(img)
print(up.shape) # (674, 1200)
cv_show_image('up', up)
down = cv2.pyrDown(img)
print(down.shape) # (169, 300)
cv_show_image('down', down)