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)

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