You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenCV拉普拉斯金字塔重建报错:尺寸不匹配问题求助

问题分析与解决方案

错误原因

你遇到的cv::pyrUp_断言错误,本质是目标尺寸不符合OpenCVpyrUp的要求。该断言的核心逻辑是:

目标尺寸的宽/高与原尺寸宽/高的2倍之差的绝对值,必须等于目标尺寸宽/高的奇偶性(即差值只能是0或1,对应目标尺寸为偶数或奇数)

你的问题出在图像堆叠后的尺寸无法满足这个规则:

  1. 原图像的height=200不是2的整数次幂倍数(比如你构建了6层金字塔,2^6=64,200无法被64整除),导致每次pyrDown后会出现非严格2倍的尺寸(比如第4次pyrDown后height变为13,第5次变为7)。
  2. 你将4张图像的拉普拉斯层垂直堆叠,把单张图像的尺寸差异放大了4倍:比如单张第5层拉普拉斯的height是7,堆叠后变为28;而单张第4层拉普拉斯的height是13,堆叠后变为52。
  3. 重建时,你尝试将28height的图像pyrUp到52height:28*2=56,52与56的差是4,52是偶数(52%2=0),4≠0,直接触发断言错误。

解决方案

方案1:调整原图像尺寸为2的整数次幂倍数(推荐)

确保原图像的宽和高都是2n的倍数(n为金字塔层数,这里你用了6层,所以n=6,26=64),这样每次pyrDown和pyrUp的尺寸都是严格的2倍关系,不会出现奇数尺寸,堆叠后的尺寸也能完美匹配pyrUp的要求。

修改代码开头的宽高定义:

width = 768  # 768 = 64*12,64是2^6
height = 192 # 192 = 64*3

方案2:重建时动态匹配尺寸(兼容非2次幂尺寸)

如果无法修改原图像尺寸,可以先让pyrUp使用默认放大2倍的尺寸,再将拉普拉斯层resize到该尺寸后相加(会损失少量精度,但能解决错误):

修改#Reconstructed Faces部分的代码:

#Reconstructed Faces
faces_reconstructed = faces_pyramid[0]
for i in range(1, 6):
    # 先执行pyrUp,使用默认放大2倍的尺寸
    faces_reconstructed = cv2.pyrUp(faces_reconstructed)
    # 将当前拉普拉斯层resize到pyrUp后的尺寸
    target_size = (faces_reconstructed.shape[1], faces_reconstructed.shape[0])
    current_laplacian = cv2.resize(faces_pyramid[i], target_size)
    # 相加合并
    faces_reconstructed = cv2.add(current_laplacian, faces_reconstructed)

额外的小错误修复

你的代码最后一行cv2.imshow("Faces", faces)中的faces变量未定义,应该改为facestack:

cv2.imshow("Faces", facestack)

内容的提问来源于stack exchange,提问作者Luis Michael Luethi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:12:07