使用OpenCV dnn_superres提升文本图像分辨率报错求助
文本图像超分崩溃的调整方案
1. 修复变量名错误
错误栈里调用sr.upsample(image),但代码中处理后的图像变量是img2,变量名不匹配是直接触发崩溃的原因,将该行改为:
result = sr.upsample(img2)
2. 修正图像归一化逻辑
当前归一化代码存在数值异常风险:
- 错误使用了原始彩色图的最大值(代码里
image.max()应为img.max(),更合理的是用灰度图的最大值) casting='unsafe'可能导致数值溢出,建议替换为安全的归一化方式:
# 替换原归一化代码 img2 = img2.astype(np.float32) img2 = cv2.normalize(img2, None, 0, 255, cv2.NORM_MINMAX) img2 = img2.astype(np.uint8)
3. 调整图像尺寸适配模型要求
EDSR_x3模型要求输入图像的高、宽必须是缩放因子(3)的整数倍,否则会触发尺寸不匹配错误。添加裁剪逻辑:
h, w = img2.shape[:2] # 裁剪到能被3整除的尺寸 new_h = h - (h % 3) new_w = w - (w % 3) img2 = img2[:new_h, :new_w]
4. 确保模型与环境兼容
- 确认
EDSR_x3.pb是OpenCV dnn模块兼容的预训练模型,建议从OpenCV官方预训练模型库下载适配版本 - 升级OpenCV到4.8.0及以上稳定版本,旧版本dnn_superres模块对部分模型兼容性较差
5. 针对文本图像的专用预处理
文本图像边缘、对比度特性特殊,预处理可提升超分效果同时避免崩溃:
- 自适应阈值强化文本边缘:
gray = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2) img2 = cv2.cvtColor(gray, cv2.COLOR_GRAY2BGR)
- 中值滤波去除噪点(避免超分后噪点放大):
gray = cv2.medianBlur(gray, 3)
内容的提问来源于stack exchange,提问作者Гыггыг Фидолобабович
相关产品推荐
相关产品推荐

