- OpenCV Python 教程
- OpenCV Python - 首頁
- OpenCV Python - 概述
- OpenCV Python - 環境配置
- OpenCV Python - 讀取影像
- OpenCV Python - 寫入影像
- OpenCV Python - 使用 Matplotlib
- OpenCV Python - 影像屬性
- OpenCV Python - 按位運算
- OpenCV Python - 形狀和文字
- OpenCV Python - 滑鼠事件
- OpenCV Python - 新增軌跡條
- OpenCV Python - 調整大小和旋轉
- OpenCV Python - 影像閾值
- OpenCV Python - 影像濾波
- OpenCV Python - 邊緣檢測
- OpenCV Python - 直方圖
- OpenCV Python - 顏色空間
- OpenCV Python - 影像變換
- OpenCV Python - 影像輪廓
- OpenCV Python - 模板匹配
- OpenCV Python - 影像金字塔
- OpenCV Python - 影像加法
- OpenCV Python - 影像混合
- OpenCV Python - 傅立葉變換
- OpenCV Python - 捕捉影片
- OpenCV Python - 播放影片
- OpenCV Python - 從影片中提取影像
- OpenCV Python - 從影像生成影片
- OpenCV Python - 人臉檢測
- OpenCV Python - 均值漂移/CamShift
- OpenCV Python - 特徵檢測
- OpenCV Python - 特徵匹配
- OpenCV Python - 數字識別
- OpenCV Python 資源
- OpenCV Python - 快速指南
- OpenCV Python - 資源
- OpenCV Python - 討論
OpenCV Python - 影像金字塔
有時,我們需要將影像轉換為與其原始尺寸不同的尺寸。為此,您可以放大影像(放大)或縮小影像(縮小)。
影像金字塔是一組影像(由單個原始影像構建),依次向下取樣指定次數。
高斯金字塔用於對影像進行下采樣,而拉普拉斯金字塔則使用較低解析度的金字塔影像重建上取樣影像。
可以將金字塔看作是一組層。影像如下所示:
金字塔較高層的影像尺寸較小。為了生成高斯金字塔中下一層的影像,我們使用高斯核對較低層影像進行卷積。
$$\frac{1}{16}\begin{bmatrix}1 & 4 & 6 & 4 & 1 \\4 & 16 & 24 & 16 & 4 \\6 & 24 & 36 & 24 & 6 \\4 & 16 & 24 & 16 & 4 \\1 & 4 & 6 & 4 & 1\end{bmatrix}$$
現在刪除所有偶數行和偶數列。生成的影像面積將是其前驅影像的 1/4。對原始影像迭代此過程會生成整個金字塔。
為了使影像變大,用零填充列。首先,將影像在每個維度上放大到原始尺寸的兩倍,用新的偶數行填充,然後使用核進行卷積以近似缺失畫素的值。
**cv.pyrUp()** 函式將原始尺寸加倍,而 **cv.pyrDown()** 函式將其減半。
示例
以下程式根據使用者輸入的“I”或“o”分別呼叫 pyrUp() 和 pyrDown() 函式。
請注意,當我們減小影像尺寸時,會丟失影像資訊。如果我們縮小影像尺寸後再將其重新縮放回原始尺寸,我們會丟失一些資訊,並且新影像的解析度遠低於原始影像。
import sys
import cv2 as cv
filename = 'chicky_512.png'
src = cv.imread(filename)
while 1:
print ("press 'i' for zoom in 'o' for zoom out esc to stop")
rows, cols, _channels = map(int, src.shape)
cv.imshow('Pyramids', src)
k = cv.waitKey(0)
if k == 27:
break
elif chr(k) == 'i':
src = cv.pyrUp(src, dstsize=(2 * cols, 2 * rows))
elif chr(k) == 'o':
src = cv.pyrDown(src, dstsize=(cols // 2, rows // 2))
cv.destroyAllWindows()
輸出
廣告