由于pyrUp / pyrDown,输入参数的大小不匹配?

时间:2016-05-20 06:16:18

标签: python opencv

如果这是一个重复的问题,我已经搜索过,找不到任何关于此的内容。

我目前正在学习OpenCV,并且在尝试获取拉普拉斯图像时遇到了阵列大小的问题。基本上,cv2.pyrUp()返回的结果与高斯金字塔中的相同级别相比还有一个“行”,这导致它抛出输入参数错误的大小。有没有人遇到过这个问题,我该怎么做才能解决它?

这是我的初始代码:

img = cv2.imread('test.jpg', 1)
G = img.copy()
gpA =[G]
for i in range(0,5):
  G = cv2.pyrDown(G)
  gpA.append(G)

lpA = [gpA[5]]
for i in xrange(5,0,-1):
    GE = cv2.pyrUp(gpA[i])
    w,d,h = GE.shape        #debug
    print w,d,h

    x,y,z = gpA[i-1].shape  #debug
    print x,y,z

    L = cv2.subtract(gpA[i-1], GE)
    lpA.append(L)

我使用了以下代码:http://docs.opencv.org/3.1.0/dc/dff/tutorial_py_pyramids.html#gsc.tab=0

我得到输入参数的大小错误,调试结果为

58 90 3 
57 90 3

但是,通过将从pyrUp部分开始的代码更改为从第一级迭代:

lpA = [gpA[5]]
for i in xrange(0,5):
 GE = cv2.pyrUp(gpA[i+1])
    w,d,h = GE.shape          #debug
    print w,d,h
    x,y,z = gpA[i].shape      #debug
    print x,y,z 
    L = cv2.subtract(gpA[i], GE)
    lpA.append(L)

我从调试中得到的结果是:

900 1440 3
900 1440 3
450 720 3
450 720 3
226 360 3
225 360 3

因此,在这种情况下,循环在遇到相同问题之前设法迭代2次。

1 个答案:

答案 0 :(得分:3)

这里的问题是,在某一点上,您会得到一个行数不均匀的图像。假设您有2 * n + 1行。 pyrDown会为您提供n + 1行的图片。因此,当您执行pyrUp时,最终会得到一个2*n + 2行的图片,比以前多一个。

解决方案是,当你执行pyrUp时,你应该这样做:

size = (gpA[i].shape[1], gpA[i].shape[0])
GE = cv2.pyrUp(gpA[i+1], dstsize = size)

这样,您的图片GE将与gpA[i]具有相同的尺寸。