问题描述:
real= np.hstack((A[:,:cols//2],B[:,cols//2:]))请问这里的hstack函数是什么意思呢?
问题解答:
np.hstack()
是 NumPy 库中的一个函数,用于将多个数组在水平方向上进行拼接。具体来说,hstack
将输入数组沿着列(即水平方向)连接在一起。
在你的代码中,real = np.hstack((A[:, :cols//2], B[:, cols//2:]))
表示将图像 A
的左半部分(A[:, :cols//2]
)与图像 B
的右半部分(B[:, cols//2:]
)水平拼接在一起,从而形成一幅新的图像 real
,这幅图像的左侧是苹果的左半部分,右侧是橘子的右半部分。
源码如下:
import cv2
import numpy as np,sys
A =cv2.imread('apple.jpg')
B =cv2.imread('orange.jpg')
#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])
GE = cv2.resize(GE, (gpA[i-1].shape[1], gpA[i-1].shape[0]))
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])
GE = cv2.resize(GE, (gpB[i - 1].shape[1], gpB[i - 1].shape[0]))
L = cv2.subtract(gpB[i-1],GE)
lpB.append(L)
#Now add left and right halves of images in each level
#numpy.hstack(tup)
#Take a sequence of arrays and stack them horizontally
#to make a single array.
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[i] = cv2.resize(LS[i], (ls_.shape[1], ls_.shape[0]))
ls_ =cv2.add(ls_,LS[i])
#image with direct connecting each half
real= np.hstack((A[:,:cols//2],B[:,cols//2:]))
cv2.imwrite('Pyramid_blending2.jpg',ls_)
cv2.imwrite('Direct_blending.jpg',real)
结果如下: