python opencv 圖像金字塔融合問題

最近在學習opencv for python,學習到了金字塔融合這邊,就是一個蘋果跟橘子融合,遇到了個困擾了幾天的問題,一直不得解決,希望廣大網友幫我解決下!問題:左半部分和右半部分使用np.hstack()拼接一起出現錯誤提示如下:

Traceback (most recent call last):
  File "C:/Users/77002/PycharmProjects/OpenCV的應用/20 圖像金字塔/20.2 融合.py", line 53, in <module>
    ls = np.hstack((la[:,0:cols/2], lb[:,cols/2:]))#將兩個圖像的矩陣的左半部分和右半部分拼接到一起
TypeError: slice indices must be integers or None or have an __index__ method

代碼如下:

#圖像金字塔的一個應用是圖像融合。例如,在圖像縫合中,你需要將兩幅 圖疊在一起,
# 但是由於連接區域圖像像素的不連續性,整幅圖的效果看起來會 很差。這時圖像金字
# 塔就可以排上用場了,他可以幫你實現無縫連接。這裏的 一個經典案例就是將兩個水果融
# 合成一個
#  1. 讀入兩幅圖像,蘋果和句子
#  2. 構建蘋果和橘子的高斯金字塔(6 層)
#  3. 根據高斯金字塔計算拉普拉斯金字塔
#  4. 在拉普拉斯的每一層進行圖像融合(蘋果的左邊與橘子的右邊融合)
#  5. 根據融合後的圖像金字塔重建原始圖像。
import cv2
import numpy as np
A = cv2.imread('Apple.png')
B = cv2.imread('Orange.png')

def sameSize(img1,img2):
    #使兩張圖片大小相同
    rows,cols,dpt = img2.shape
    dst = img1[:rows,:cols]
    return dst

#用A圖像生成高斯金字塔
G = A.copy()
gpA = [G]  #現在list裏放入原圖
for i in range(6):  #6層
    G = cv2.pyrDown(G) #對gpA裏的圖像生成高斯金字塔
    gpA.append(G) #把金字塔圖像分別放入到gpA list中

#用B圖像生成高斯金字塔
G = B.copy()
gpB = [G]  #現在list裏放入原圖
for i in range(6):  #6層
    G = cv2.pyrDown(G) #生成高斯金字塔
    gpB.append(G) #把金字塔圖像分別放入到gpB list中

#用A圖像生成拉普拉斯金字塔
lpA = [gpA[5]]  #放入高斯金字塔的最後一層
for i in np.arange(5,0,-1):
    GE = cv2.pyrUp(gpA[i])  #對高斯圖像裏的每一層生成拉普拉斯圖像
    L = cv2.subtract(gpA[i-1],sameSize(GE,gpA[i-1])) #圖像相減   #拉普拉斯金字塔公式生成拉普拉斯金字塔
    lpA.append(L)

#用B圖像生成拉普拉斯金字塔
lpB = [gpB[5]]  #放入高斯金字塔的最後一層
for i in np.arange(5,0,-1):
    GE = cv2.pyrUp(gpB[i])  #對高斯圖像裏的每一層生成拉普拉斯圖像
    L = cv2.subtract(gpB[i-1],sameSize(GE,gpB[i-1])) #圖像相減   #拉普拉斯金字塔公式生成拉普拉斯金字塔
    lpB.append(L)

#現在添加左和在每個級別的# NumPy圖像右兩半。hstack(TUP)#採取一序列的陣列和堆放水平#使一個單一的陣列。
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)

#重建圖像
ls_ = LS[0] #這裏LS[0]爲高斯金字塔的最小圖片
for i in range(1,6):
    ls_ = cv2.pyrUp(ls_)
    ls_ = cv2.add(ls_,LS[i])

#直接連接每一半的圖像
rows, cols, dpt = A.shape
real = np.hstack((A[:,:cols/2],B[:,cols/2:]))

cv2.imwrite('ianmge1.jpg',ls_)
cv2.imwrite('ianmag2.jpg',real)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章