我用金字塔做图像混合。。。 我得到一个opencv错误。。 我正在学习官方的opencv教程。 http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_tutorials.html
import cv2
import numpy as np,sys
A = cv2.imread('/home/grayhat/apple.jpg')
B = cv2.imread('/home/grayhat/orange.jpg')
# generate Gaussian pyramid for A
G = A.copy()
gpA = [G]
for i in xrange(6):
G = cv2.pyrDown(G)
gpA.append(G)
# generate Gaussian pyramid for B
G = B.copy()
gpB = [G]
for i in xrange(6):
G = cv2.pyrDown(G)
gpB.append(G)
# generate Laplacian Pyramid for A
lpA = [gpA[5]]
for i in xrange(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 xrange(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 xrange(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.imwrite('Pyramid_blending2.jpg',ls_)
cv2.imwrite('Direct_blending.jpg',real)
错误如下:
OpenCV Error: Sizes of input arguments do not match (The operation is neither 'array op array' (where arrays have the same size and the same number of channels), nor 'array op scalar', nor 'scalar op array') in arithm_op, file /build/buildd/opencv-2.4.8+dfsg1/modules/core/src/arithm.cpp, line 1287
Traceback (most recent call last):
File "programs/test11.py", line 25, in <module>
L = cv2.subtract(gpA[i-1],GE)
cv2.error: /build/buildd/opencv-2.4.8+dfsg1/modules/core/src/arithm.cpp:1287: error: (-209) The operation is neither 'array op array' (where arrays have the same size and the same number of channels), nor 'array op scalar', nor 'scalar op array' in function arithm_op
似乎您没有在此处正确生成高斯金字塔:
根据OpenCV关于cv2.pyrDown的文档,如果您不指定
dstsize
,它将默认为((src.cols+1)/2, (src.rows+1)/2)
。但是,您总是在原始G
副本上进行下采样。 如果我倒立正确,我想你必须把它应用到最后一个下采样图像上:显然,这同样适用于您的B金字塔。
现在,如果您的图像具有偶数形状,但由于
cv2.pyrDown
如何计算默认大小,因此不具有奇数形状,则脚本将工作。在这种情况下,必须根据用于执行cv2.substract
(或cv2.add
)的图像,给cv2.pyrUp
适当的dstsize
参数。然后,这一点也适用于重建部分:
以下代码适用于Python3,请尝试:
参考:
https://docs.opencv.org/3.1.0/dc/dff/tutorial_py_pyramids.html
相关问题 更多 >
编程相关推荐