文章目录
前言
随着人工智能的不断发展,OpenCV这门技术也越来越重要,很多人都开启了学习OpenCV,本文就介绍了OpenCV的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、图像金字塔是什么?
图像金字塔
顾名思义,是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构。
图像金字塔最初用于机器视觉和图像压缩,一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。
其通过梯次向下采样获得,直到达到某个终止条件才停止采样。金字塔的底部是待处理图像的高分辨率表示,而顶部是低分辨率的近似。
我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。
常见两类图像金字塔:
1.高斯金字塔 ( Gaussian pyramid):
用来向下/降采样,主要的图像金字塔
2.拉普拉斯金字塔(Laplacian pyramid):
用来从金字塔低层图像重建上层未采样图像,在数字图像处理中也即是预测残差,可以对图像进行最大程度的还原,配合高斯金字塔一起使用。
二、使用步骤
原图如下:
1.引入库
代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#author:Kong DeXing
#案例:Fu Xianjun. All Rights Reserved.
import cv2
import numpy as np
2.读入数据
代码如下:
A = cv2.imread("apple.png")
A = cv2.resize(A,(512,512))
cv2.imshow("A",A)
B = cv2.imread("orange.png")
B = cv2.resize(B,(512,512))
cv2.imshow("B",B)
G = A.copy()
gpA = [G]
for i in range(5):
G = cv2.pyrDown(G)
gpA.append(G)
G = B.copy()#复制图像
gpB = [G]#定义列表存储图像变量
for i in range(5):#循环五次
G = cv2.pyrDown(G)#下采样
gpB.append(G)#将下采样图像变量结果存入列表GPA
lpA = [gpA[5]]
for i in range(5,0,-1):
GE = cv2.pyrUp(gpA[i])
L = cv2.subtract(gpA[i-1],GE)
lpA.append(L)
lpB = [gpB[5]]
for i in range(5,0,-1):
GE = cv2.pyrUp(gpB[i])
L = cv2.subtract(gpB[i-1],GE)
lpB.append(L)
#合并
LS = []
for la,lb in zip(lpA,lpB):
h,w,c = la.shape
ls = np.hstack((la[:,0:w//2],lb[:,w//2:]))
LS.append(ls)
#重构图像
ls_ = LS[0]
for i in range(1,6):
ls_ = cv2.pyrUp(ls_)
ls_ = cv2.add(ls_,LS[i])
3.显示图像
cv2.imshow("ls_",ls_)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果如下:
总结
以上就是今天要讲的内容,本文仅仅简单介绍了图像金字塔的使用,而图像金字塔提供了大量能使我们快速便捷地处理数据的函数和方法。