如何在 OpenCV Python 中使用影像金字塔混合影像?
我們可以使用高斯和拉普拉斯影像金字塔混合影像。高斯金字塔是一種影像金字塔。要建立**高斯金字塔**,OpenCV 為我們提供了兩個函式**cv2.pyrDown()** 和 **cv2.pyrUp()**。我們可以從**高斯金字塔**形成**拉普拉斯金字塔**。在拉普拉斯金字塔中,影像看起來只像是邊緣影像。拉普拉斯金字塔中的一層是由高斯金字塔中該層與其上一層在高斯金字塔中擴充套件版本的差異形成的。
步驟
要使用影像金字塔混合影像,我們可以按照以下步驟操作:
匯入所需的庫**OpenCV** 和 **NumPy**。確保您已安裝它們。
使用**cv2.imread()** 方法讀取兩個輸入影像**A** 和**B**。指定完整的影像路徑。將影像大小調整為 (512,512)。
為兩個輸入影像 A 和 B 生成高斯金字塔。
使用高斯金字塔,為兩個輸入影像**A** 和**B** 生成拉普拉斯金字塔。
在拉普拉斯金字塔的每一層中,新增第一張影像的左側部分和第二張影像的右側部分。
混合並重建影像。顯示混合後的影像
讓我們看一些示例,以便更清楚地理解。
輸入影像
在下面的示例中,我們將使用以下影像作為輸入檔案。


示例
在此示例中,我們使用影像金字塔混合兩個輸入影像。
import cv2 import numpy as np,sys A = cv2.imread('car.jpg') B = cv2.imread('blue-car.jpg') A = cv2.resize(A, (512, 512)) B = cv2.resize(B, (512, 512)) # generate Gaussian pyramid for A G = A.copy() gpA = [G] for i in range(6): G = cv2.pyrDown(G) gpA.append(G) # generate Gaussian pyramid for B G = B.copy() gpB = [G] for i in range(6): G = cv2.pyrDown(G) gpB.append(G) # generate Laplacian Pyramid for A 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) # generate Laplacian Pyramid for B 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) # Now add left and right halves of images in each level LS = [] for la,lb in zip(lpA,lpB): rows,cols,dpt = la.shape ls = np.hstack((la[:,0:cols//2], lb[:,cols//2:])) LS.append(ls) # now reconstruct ls_ = LS[0] for i in range(1,6): ls_ = cv2.pyrUp(ls_) ls_ = cv2.add(ls_, LS[i]) # image with direct connecting each half real = np.hstack((A[:,:cols//2],B[:,cols//2:])) cv2.imshow('Pyramid_blending.jpg',ls_) cv2.waitKey(0) cv2.imshow('Direct_blending.jpg',real) cv2.waitKey(0) cv2.destroyAllWindows()
輸出
以上程式執行後,將生成以下兩個輸出視窗:


第一個視窗顯示使用影像金字塔進行影像混合,第二個視窗顯示直接影像混合。請注意以上兩個影像之間的差異。
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP