cv::dnn::blobFromImage blob的值输出错误的问题

有朋友知道这个函数调用后 blob的值输出错误的问题吗
cv::dnn::blobFromImage(modelInput, blob, 1.0, modelShape,
cv::Scalar(), true, false);
调用此函数以后blob 中
blob.cols = -1
blob.rows = -1
出现这种情况的原因是什么呢?
是在什么情况下输出的 blob的值是不正确的呢

### 解决方案 在使用 OpenCV 的 `dnn` 模块加载 YOLOv4 进行目标检测时遇到的 `AttributeError` 通常是由以下几个原因引起的: #### 原因分析 1. **OpenCV 安装不完整** 如果仅安装了基础版本的 OpenCV (`opencv-python`) 而未安装扩展模块 (`opencv-contrib-python`),则可能导致缺少某些功能,例如 `cv2.dnn.DICT_VALUE` 属性[^2]。 2. **OpenCV 版本兼容性问题** 不同版本的 OpenCV 对于特定属性的支持可能存在差异。如果使用的 OpenCV 版本较旧,则可能无法支持最新的 DNN 功能[^1]。 3. **YOLO 权重文件或配置文件损坏** 加载错误也可能源于权重文件 (.weights) 或配置文件 (.cfg) 存在问题,这会间接引发异常。 --- #### 解决方法 ##### 方法一:确保正确安装 OpenCV 及其扩展包 通过以下命令安装完整的 OpenCV 和贡献库: ```bash pip uninstall opencv-python opencv-contrib-python -y pip install opencv-python==4.6.0.66 opencv-contrib-python==4.6.0.66 ``` 此操作可以确保 `cv2.dnn` 模块及其依赖项被正确安装并保持一致版本[^2]。 ##### 方法二:验证模型文件完整性 确认所使用的 `.weights` 文件和 `.cfg` 文件无误。可以通过以下方式测试: ```python import cv2 net = cv2.dnn.readNetFromDarknet('yolov4.cfg', 'yolov4.weights') if net is None: raise ValueError("Model files are invalid or missing.") print("Model loaded successfully!") ``` 如果在此处抛出异常,则需重新下载官方发布的预训练模型文件。 ##### 方法三:升级 Python 环境中的 OpenCV 至最新稳定版 有时更高版本能够修复已知 bug 并增强对新框架的支持。尝试更新至最新版本(假设当前为 v4.x): ```bash pip install --upgrade opencv-python-headless opencv-contrib-python-headless ``` 注意:对于生产环境建议固定具体版本号以避免未来潜在冲突。 ##### 方法四:切换到其他实现方式 如果持续存在问题,可考虑采用 PyTorch 或 TensorFlow 实现相同的目标检测任务,这些框架提供了更丰富的文档和支持社区资源。 --- ### 示例代码 以下是基于修正后的 OpenCV 设置运行 YOLOv4 的简单示例: ```python import cv2 import numpy as np # 初始化网络 modelConfiguration = "yolov4.cfg" modelWeights = "yolov4.weights" net = cv2.dnn.readNetFromDarknet(modelConfiguration, modelWeights) # 获取输出层名称 ln = net.getLayerNames() ln = [ln[i - 1] for i in net.getUnconnectedOutLayers()] image = cv2.imread("test_image.jpg") blob = cv2.dnn.blobFromImage(image, 1/255.0, (416, 416), swapRB=True, crop=False) net.setInput(blob) layerOutputs = net.forward(ln) print("Detection completed without errors.") ``` --- ###
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值