使用Python调用OpenCV遇导入错误,求助解决方案
OpenCV导入时缺失FFmpeg依赖库的解决办法
问题描述
此前使用OpenCV完全正常,近期运行哪怕是显示图片这类基础Python程序,都会立刻抛出错误。错误栈显示导入cv2时,无法找到FFmpeg相关依赖库:libswresample.4.dylib、libavcodec.59.dylib、libavutil.57.dylib,已尝试卸载重装OpenCV但问题依旧。
错误信息
Traceback (most recent call last): File "/Users/myusername/Desktop/opencv_test_main/opencv.py", line 1, in <module> import cv2 File "/opt/homebrew/lib/python3.10/site-packages/cv2/__init__.py", line 181, in <module> bootstrap() File "/opt/homebrew/lib/python3.10/site-packages/cv2/__init__.py", line 153, in bootstrap native_module = importlib.import_module("cv2") File "/opt/homebrew/Cellar/python@3.10/3.10.8/Frameworks/Python.framework/Versions/3.10/lib/python3.10/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) ImportError: dlopen(/opt/homebrew/lib/python3.10/site-packages/cv2/python-3.10/cv2.cpython-310-darwin.so, 0x0002): Library not loaded: /opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libswresample.4.dylib Referenced from: <D8B40CEE-FD64-33D7-9FBB-D99C076CAE66> /opt/homebrew/Cellar/ffmpeg/5.1.2.reinstall/lib/libavcodec.59.37.100.dylib Reason: tried: '/opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libswresample.4.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libswresample.4.dylib' (no such file), '/opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libswresample.4.dylib' (no such file), '/usr/local/lib/libswresample.4.dylib' (no such file), '/usr/lib/libswresample.4.dylib' (no such file, not in dyld cache)Library not loaded: /opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libavcodec.59.dylib Referenced from: <D8E78893-F144-3845-A719-8CFFB8415DC1> /opt/homebrew/Cellar/ffmpeg/5.1.2.reinstall/lib/libavformat.59.27.100.dylib Reason: tried: '/opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libavcodec.59.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libavcodec.59.dylib' (no such file), '/opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libavcodec.59.dylib' (no such file), '/usr/local/lib/libavcodec.59.dylib' (no such file), '/usr/lib/libavcodec.59.dylib' (no such file, not in dyld cache)Library not loaded: /opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libavutil.57.dylib Referenced from: <13009670-C126-334B-9BAE-6C052B28BDCE> /opt/homebrew/Cellar/ffmpeg/5.1.2.reinstall/lib/libswscale.6.7.100.dylib Reason: tried: '/opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libavutil.57.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libavutil.57.dylib' (no such file), '/opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libavutil.57.dylib' (no such file), '/usr/local/lib/libavutil.57.dylib' (no such file), '/usr/lib/libavutil.57.dylib' (no such file, not in dyld cache) myusername@Zachs-MBP-2 opencv_test_main % /opt/homebrew/bin/python3 /Users/myusername/Desktop/opencv_test_main/opencv_test.py Traceback (most recent call last): File "/Users/myusername/Desktop/opencv_test_main/opencv_test.py", line 1, in <module> import cv2 File "/opt/homebrew/lib/python3.10/site-packages/cv2/__init__.py", line 181, in <module> bootstrap() File "/opt/homebrew/lib/python3.10/site-packages/cv2/__init__.py", line 153, in bootstrap native_module = importlib.import_module("cv2") File "/opt/homebrew/Cellar/python@3.10/3.10.8/Frameworks/Python.framework/Versions/3.10/lib/python3.10/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) ImportError: dlopen(/opt/homebrew/lib/python3.10/site-packages/cv2/python-3.10/cv2.cpython-310-darwin.so, 0x0002): Library not loaded: /opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libswresample.4.dylib Referenced from: <D8B40CEE-FD64-33D7-9FBB-D99C076CAE66> /opt/homebrew/Cellar/ffmpeg/5.1.2.reinstall/lib/libavcodec.59.37.100.dylib Reason: tried: '/opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libswresample.4.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libswresample.4.dylib' (no such file), '/opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libswresample.4.dylib' (no such file), '/usr/local/lib/libswresample.4.dylib' (no such file), '/usr/lib/libswresample.4.dylib' (no such file, not in dyld cache)Library not loaded: /opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libavcodec.59.dylib Referenced from: <D8E78893-F144-3845-A719-8CFFB8415DC1> /opt/homebrew/Cellar/ffmpeg/5.1.2.reinstall/lib/libavformat.59.27.100.dylib Reason: tried: '/opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libavcodec.59.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libavcodec.59.dylib' (no such file), '/opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libavcodec.59.dylib' (no such file), '/usr/local/lib/libavcodec.59.dylib' (no such file), '/usr/lib/libavcodec.59.dylib' (no such file, not in dyld cache)Library not loaded: /opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libavutil.57.dylib Referenced from: <13009670-C126-334B-9BAE-6C052B28BDCE> /opt/homebrew/Cellar/ffmpeg/5.1.2.reinstall/lib/libswscale.6.7.100.dylib Reason: tried: '/opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libavutil.57.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libavutil.57.dylib' (no such file), '/opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libavutil.57.dylib' (no such file), '/usr/local/lib/libavutil.57.dylib' (no such file), '/usr/lib/libavutil.57.dylib' (no such file, not in dyld cache)
解决步骤
1. 安装对应版本的FFmpeg
错误提示中OpenCV依赖的是FFmpeg 5.1.2版本,直接安装该版本:
brew install ffmpeg@5.1
安装完成后,强制链接该版本到系统路径:
brew link --force ffmpeg@5.1
2. 重新安装带FFmpeg支持的OpenCV
如果上面的步骤无效,卸载当前OpenCV后,重新安装带有FFmpeg依赖的版本:
pip uninstall opencv-python opencv-contrib-python -y pip install opencv-python --no-binary opencv-python
或者用Homebrew直接安装OpenCV(确保关联FFmpeg):
brew uninstall opencv brew install opencv --with-ffmpeg
3. 修复动态链接库路径
如果FFmpeg已安装但路径不匹配,可以用otool和install_name_tool手动修复cv2的动态链接:
首先查看cv2库依赖的FFmpeg路径:
otool -L /opt/homebrew/lib/python3.10/site-packages/cv2/python-3.10/cv2.cpython-310-darwin.so | grep ffmpeg
然后替换错误的路径为当前FFmpeg的实际路径(假设当前FFmpeg安装在/opt/homebrew/Cellar/ffmpeg/5.1.2.reinstall):
install_name_tool -change /opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libswresample.4.dylib /opt/homebrew/Cellar/ffmpeg/5.1.2.reinstall/lib/libswresample.4.dylib /opt/homebrew/lib/python3.10/site-packages/cv2/python-3.10/cv2.cpython-310-darwin.so install_name_tool -change /opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libavcodec.59.dylib /opt/homebrew/Cellar/ffmpeg/5.1.2.reinstall/lib/libavcodec.59.dylib /opt/homebrew/lib/python3.10/site-packages/cv2/python-3.10/cv2.cpython-310-darwin.so install_name_tool -change /opt/homebrew/Cellar/ffmpeg/5.1.2/lib/libavutil.57.dylib /opt/homebrew/Cellar/ffmpeg/5.1.2.reinstall/lib/libavutil.57.dylib /opt/homebrew/lib/python3.10/site-packages/cv2/python-3.10/cv2.cpython-310-darwin.so
4. 检查Python环境
如果使用虚拟环境,确保激活对应的环境后再安装OpenCV和FFmpeg相关依赖,避免全局环境和虚拟环境的依赖冲突。
内容的提问来源于stack exchange,提问作者Velocity Games
相关产品推荐
相关产品推荐

