Ubuntu18.04+OpenCV3.2运行YOLO报错cv2无dnn属性问题如何解决
问题根源
- OpenCV 3.2版本原生不内置dnn模块:dnn模块是OpenCV 3.3及以上版本才正式纳入官方主发行包的功能,你当前使用的3.2版本默认没有该模块。
- 你的环境安装了ROS Melodic,ROS Melodic默认绑定的OpenCV版本就是3.2,Python运行时会优先导入ROS自带的无dnn模块的OpenCV包,哪怕你单独装了高版本也可能被覆盖优先级。
- 补充:你的代码文件命名为
import cv2.py,和cv2模块名重名,也可能引发导入异常。
解决方法
方法1:虚拟环境隔离安装高版本OpenCV(推荐,不影响ROS依赖)
- 安装虚拟环境工具:
sudo apt install python3-virtualenv python-virtualenv
- 创建并激活独立的Python虚拟环境:
# 创建名为cv_env的虚拟环境,可自行调整Python版本 virtualenv -p python3 cv_env source cv_env/bin/activate
- 激活虚拟环境后,安装带dnn模块的OpenCV版本:
pip install opencv-python==3.4.18.65 opencv-contrib-python==3.4.18.65
- 把你的代码文件重命名为不与模块冲突的名称,比如
yolo_test.py,再运行代码即可正常调用cv2.dnn接口。
方法2:编译OpenCV 3.2添加dnn模块(不推荐,适配难度高)
- 下载与OpenCV 3.2版本匹配的opencv_contrib源码,编译时开启DNN模块的编译选项,重新编译安装OpenCV。该操作容易破坏ROS的OpenCV依赖,非必要不建议操作。
内容的提问来源于stack exchange,提问作者박홍준
相关产品推荐
相关产品推荐

