如何构建OpenCV Contrib模块并获取其whl内so文件对应源码
问题原因说明
你在whl的opencv_contrib_python.libs文件夹看到的libavformat这类so文件,不属于opencv或opencv-contrib本身的源码产物,是opencv-python包构建时预先编译打包的第三方依赖库(比如libavformat是FFmpeg的核心模块),所以你下载的opencv-contrib-python源码包不会包含这些第三方依赖的源码,默认编译也不会生成对应so。
解决步骤
如果你要修改的是opencv核心/contrib自带的功能模块
你之前的cmake命令缺少依赖开启开关,补充对应参数即可让编译出的opencv正确链接对应依赖,和whl中的表现一致。开启FFmpeg支持的参考cmake命令如下:cmake ../opencv-contrib-python-4.4.0.46/opencv/ \ -D OPENCV_EXTRA_MODULES_PATH=../opencv-contrib-python-4.4.0.46/opencv_contrib/modules/ \ -D WITH_FFMPEG=ON \ -D CMAKE_BUILD_TYPE=Release \ -D BUILD_opencv_python3=ON如果需要开启其他依赖,对应添加
WITH_*系列开关即可,cmake会自动匹配系统中安装的对应依赖库完成链接。如果你要修改的是
libavformat这类第三方依赖的功能- 先通过so名称确认依赖归属和对应版本,比如
libavformat-06a336f2.so.58.61.100对应FFmpeg 4.4.x版本,下载对应版本的依赖源码完成修改后自行编译。 - 重新执行opencv的cmake命令,添加参数指定你修改后的依赖路径,比如指定自定义FFmpeg的参数:
cmake ../opencv-contrib-python-4.4.0.46/opencv/ \ -D OPENCV_EXTRA_MODULES_PATH=../opencv-contrib-python-4.4.0.46/opencv_contrib/modules/ \ -D WITH_FFMPEG=ON \ -D FFMPEG_INCLUDE_DIR=你修改后的FFmpeg头文件目录路径 \ -D FFMPEG_LIBRARY=你编译出的自定义libavformat.so文件路径 \ -D CMAKE_BUILD_TYPE=Release \ -D BUILD_opencv_python3=ON编译后的opencv会优先链接你提供的自定义版本依赖,完成需求。
- 先通过so名称确认依赖归属和对应版本,比如
内容的提问来源于stack exchange,提问作者Harry Boy
相关产品推荐
相关产品推荐

