Python,OpenCV图像金字塔cv2.pyrUp(), cv2.pyrDown()
生活随笔
收集整理的這篇文章主要介紹了
Python,OpenCV图像金字塔cv2.pyrUp(), cv2.pyrDown()
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Python,OpenCV圖像金字塔cv2.pyrUp, cv2.pyrDown
- 1. 效果圖
- 2. 原理
- 2.1 什么是圖像金字塔
- 2.2 金字塔分類
- 2.3 應用
- 3. 源碼
- 參考
這篇博客將介紹圖像金字塔的理論,及用圖像金字塔cv2.pyrUp(), cv2.pyrDown()實現蘋果與梨的完美融合;
1. 效果圖
高斯金字塔效果圖如下:
一層是另一層的寬高的1/2;
高斯金字塔原圖 VS 低分辨率圖 VS 高分辨率效果圖如下:
可以看到先pyDown丟失了行列信息后,在pyUp填充行列信息圖像會極其的模糊。因為一旦降低分辨率,就會丟失信息。
拉普拉斯效果圖如下:
圖像融合效果圖如下:
2. 原理
2.1 什么是圖像金字塔
同一幅圖像的不同分辨率的圖像,從下到上看起來像金字塔,即稱之為金字塔;
2.2 金字塔分類
- 高斯金字塔
高斯金字塔中的高層次(低分辨率)是通過去除低層次(高分辨率)圖像中的連續行和列而形成的。然后,將底層5個像素的貢獻值加上高斯權值,形成更高層次的每個像素;
每一層M×N圖像就變成了M/2×N/2圖像,面積減少到原來面積的四分之一。它被稱為八度音階。
- 拉普拉斯金字塔
拉普拉斯金字塔是由高斯金字塔形成的;
拉普拉斯金字塔圖像就像邊緣圖像,它的大部分元素是零,用于圖像壓縮;
拉普拉斯金字塔中的一層是由高斯金字塔中的該層和高斯金字塔中其上層的擴展版本之間的差異形成的。
2.3 應用
- 圖像壓縮
- 圖像大小改變
- 圖像融合:使用金字塔進行圖像融合可以實現無縫融合,而不會在圖像中留下太多數據。
3. 源碼
# 圖像金字塔
import cv2
import imutilsimg = cv2.imread('ym3.jpg')
img = imutils.resize(img, width=500)lower_reso = img
cv2.imshow("origin", img)for i in range(0, 3):lower_reso = cv2.pyrDown(lower_reso)cv2.imshow("lower_reso " + str(i), lower_reso)
cv2.waitKey(0)
cv2.destroyAllWindows()img = imutils.resize(img, width=300)
lower_reso = cv2.pyrDown(img)
higher_reso = cv2.pyrUp(lower_reso)
cv2.imshow("origin", img)
cv2.imshow("lower_reso", lower_reso)
cv2.imshow("higher_reso", higher_reso)
cv2.waitKey(0)def getLaplacian():img = cv2.imread('ym2.jpg')img = cv2.resize(img, (800, 800))# 為圖像生成高斯金字塔G = img.copy()gpA = [G]for i in range(4):G = cv2.pyrDown(G)gpA.append(G)# 為圖像生成拉普拉斯金字塔for i in range(4, 0, -1):GE = cv2.pyrUp(gpA[i])print(gpA[i - 1].shape, GE.shape)L = cv2.subtract(gpA[i - 1], GE)cv2.imshow("Laplacian " + str(i), L)cv2.waitKey(0)getLaplacian()
參考
- https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_pyramids/py_pyramids.html#py-pyramids
總結
以上是生活随笔為你收集整理的Python,OpenCV图像金字塔cv2.pyrUp(), cv2.pyrDown()的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python,OpenCV鼠标事件进行矩
- 下一篇: Java BufferImage图片处理