我已经搜索过但找不到任何关于此的内容,因此如果这是一个重复的问题,我深表歉意。
我目前正在学习 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)
Run Code Online (Sandbox Code Playgroud)
我使用了以下代码:http : //docs.opencv.org/3.1.0/dc/dff/tutorial_py_pyramids.html#gsc.tab=0
我得到输入参数的大小错误,调试结果是
58 90 3
57 90 3
Run Code Online (Sandbox Code Playgroud)
但是,通过更改从 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)
Run Code Online (Sandbox Code Playgroud)
我从调试中得到的结果是:
900 1440 3
900 1440 3
450 720 3
450 720 3
226 360 3
225 360 3
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,循环在遇到同样的问题之前设法迭代了 2 次。
这里的问题是,在某一时刻你会得到一个行数奇数的图像。假设您有2 * n + 1行。 pyrDown会给你一个带有n + 1行的图像。因此,当您执行 a 时pyrUp,您最终会得到一个带有2*n + 2行的图像,比以前多一个。
解决方案是,当你做你的时候pyrUp,你应该这样做:
size = (gpA[i].shape[1], gpA[i].shape[0])
GE = cv2.pyrUp(gpA[i+1], dstsize = size)
Run Code Online (Sandbox Code Playgroud)
这样,您的图像GE将具有与gpA[i].
| 归档时间: |
|
| 查看次数: |
2013 次 |
| 最近记录: |