python - 图像金字塔计算错误“输入参数的大小不匹配”
问题描述
我正在按照此处的官方 Python 教程学习图像金字塔。
我收到以下错误以及突出显示最后一个引用的警告cols
。
有人可以帮我了解错误的原因以及如何更改代码以解决警告real = np.hstack((A[:, :cols/2], B[:, cols/2:]))
吗?
第 29 行,在 L = cv.subtract(gpA[i - 1], GE) cv2.error: OpenCV(4.4.0) /private/var/folders/9m/h_ts52xj0jdgs6w0m2lqv9wr0000gn/T/pycharm-packaging/opencv-python/ opencv/modules/core/src/arithm.cpp:669:错误:(-209:输入参数的大小不匹配)该操作既不是“数组操作数组”(其中数组具有相同的大小和相同的通道数),也不是函数'arithm_op'中的'array op scalar',也不是'scalar op array'
import cv2 as cv
import numpy as np
path1 = "resources/apple.jpg"
A = cv.imread(path1, 0)
path2 = "resources/orange.jpg"
B = cv.imread(path2, 0)
# Generate Gaussian pyramid for A.
G = A.copy()
gpA = [G]
for i in range(6):
G = cv.pyrDown(G)
gpA.append(G)
# Generate Gaussian pyramid for B.
G = B.copy()
gpB = [G]
for i in range(6):
G = cv.pyrDown(G)
gpB.append(G)
# Generate Laplacian Pyramid for A.
lpA = [gpA[5]]
for i in range(5, 0, -1):
GE = cv.pyrUp(gpA[i])
L = cv.subtract(gpA[i - 1], GE)
lpA.append(L)
# Generate Laplacian Pyramid for B.
lpB = [gpB[5]]
for i in range(5, 0, -1):
GE = cv.pyrUp(gpB[i])
L = cv.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[:, :cols/2], lb[:, cols/2:]))
LS.append(ls)
# Now, re-construct.
ls_ = LS[0]
for i in range(1, 6):
ls_ = cv.pyrUp(ls_)
ls_ = cv.add(ls_, LS[i])
# Image with direct connecting each half.
real = np.hstack((A[:, :cols/2], B[:, cols/2:]))
cv.imwrite('Pyramid_blending.jpg', ls_)
cv.imwrite('Direct_blending.jpg', real)
这些是我正在使用的图像:
解决方案
当您使用cv.pyrUp
.
|dstsize.width−src.cols∗2| ≤ (dstsize.widthmod2)
|dstsize.height−src.rows∗2| ≤ (dstsize.heightmod2)
因此,在您的情况下,当您到达gpA[4]
具有奇数宽度尺寸并且上采样器使用默认值并为上采样提供偶数宽度尺寸时,这是一个问题gpA[5]
gpA[4].shape: (13, 16)
GE.shape: (14, 16)
您最终会得到不同维度的数组,因此无法将它们彼此相减。
为避免这种情况,您需要从上采样中明确定义所需的维度,例如,您可以找到gpA[i-1]
并使用这些维度
推荐阅读
- sql - SQL:从 XMLTYPE 中获取值
- python - 在 pandas 中使用 groupby 命令后使用 seaborn 进行绘图
- c# - '没有 'IEnumerable 类型的 ViewData 项
'那有钥匙。 - java - 检测微服务内部进程的完成
- javascript - 用js截屏时出错
- javascript - IE 和 Windows Server 2012 上的 JavaScript 音频元素
- html - 在引导轮播中每个图像的底部添加链接
- c# - 带有共享选项列表的纯文本给出错误
- asp.net - ASP.NET CORE 2:模型绑定的复杂类型不能是抽象类型或值类型,并且必须具有无参数构造函数
- android - 即使出现错误(root),如何强制 gradle 构建我的应用程序?