【问题标题】:Size of input arguments do not match due to pyrUp/pyrDown?由于 pyrUp/pyrDown,输入参数的大小不匹配?
【发布时间】:2016-05-20 06:16:17
【问题描述】:

我已经搜索并找不到任何关于此的信息,如果这是一个重复的问题,我深表歉意。

我目前正在学习 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 次。

【问题讨论】:

    标签: python opencv


    【解决方案1】:

    这里的问题是,有时您会得到一个行数不均匀的图像。假设您有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] 具有相同的大小。

    【讨论】:

    • 感谢您的回复!但是,当我输入 dstsize 时,我得到了这个:TypeError: function takes just 2 arguments (3 given)
    • 这很奇怪...我不是 Python 专家,因为我主要在 C++ 中使用 OpenCV,但在示例 lappyr.py 给出的 OpenCV 源代码中,我可以清楚地看到一行 @987654333 @ 然后尝试使用getsize(gpA[i]) 而不是gpA[i].shape
    • 我看到了另一个答案here。如果我先分配size = (gpA[i-1].shape[1], gpA[i-1].shape[0]) 并改用size,它会起作用。
    • 好的,太好了!我将更改我的答案以包含此内容。
    猜你喜欢
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多