使用OpenCV超分辨率EDSR模型时出现Mat内存分配错误求助
问题分析与修复方案
核心错误原因
1. 预训练模型与缩放因子不匹配
你加载的是EDSR_x2.pb(对应2倍超分辨率),但调用setModel时指定了缩放因子3——每个EDSR预训练模型都是针对固定缩放倍数训练的,模型和缩放因子必须严格对应:
EDSR_x2.pb→ 仅支持scale=2EDSR_x3.pb→ 仅支持scale=3EDSR_x4.pb→ 仅支持scale=4
2. 未验证图像加载状态
即使确认了路径,cv2.imread仍可能因文件损坏、路径特殊字符(如空格)返回None,空图像传入模型会直接触发断言错误。
修复后的完整代码
import cv2 import numpy as np import tensorflow as tf # 加载图像并校验 image_path = 'C:/Users/HP/Desktop/IMG Enhancement/test2.png' image = cv2.imread(image_path) if image is None: raise ValueError(f"无法加载图像,请检查路径或文件完整性:{image_path}") # 初始化超分辨率模型 sr_model = cv2.dnn_superres.DnnSuperResImpl_create() # 加载对应缩放倍数的预训练模型(示例用x2模型) sr_model.readModel("EDSR_x2.pb") # 若模型不在当前目录,请使用绝对路径 sr_model.setModel("edsr", 2) # 缩放因子与模型严格匹配 # 执行超分辨率增强 enhanced_image = sr_model.upsample(image) # 可选:保存或预览结果 cv2.imwrite('enhanced_test2.png', enhanced_image) cv2.imshow('Enhanced Image', enhanced_image) cv2.waitKey(0) cv2.destroyAllWindows()
额外检查项
- 确认模型路径正确:如果
EDSR_x2.pb不在脚本运行目录,替换为绝对路径(如C:/Users/HP/Desktop/IMG Enhancement/EDSR_x2.pb) - 验证图像完整性:用系统自带工具打开
test2.png,确认文件未损坏 - 版本兼容性:若问题仍存在,可尝试将OpenCV降级到4.5.x版本测试(部分高版本对dnn模块的兼容性存在小问题)
内容的提问来源于stack exchange,提问作者Bilal
相关产品推荐
相关产品推荐

