如何获取OpenCV模块列表及源码编译时禁用非必要模块(仅需imread)
关于OpenCV模块的两个问题解答
1. 如何获取OpenCV的模块列表?
获取模块列表分两种场景,已安装的OpenCV和源码中的模块:
- 已安装的OpenCV(Python环境):直接在Python交互环境里运行
cv2.getBuildInformation(),输出内容里会有一个Modules章节,清晰列出所有已编译安装的模块,包括启用和禁用状态。 - 已安装的OpenCV(C++环境):如果是源码编译的版本,一般会自带
opencv_version工具,在终端运行opencv_version --modules就能快速列出所有启用的模块;也可以查看编译时生成的CMakeCache.txt文件,里面的BUILD_opencv_*系列配置项,能直观看到各模块的启用情况。 - OpenCV源码中的所有模块:直接打开OpenCV源码根目录下的
modules文件夹,每个子文件夹对应一个模块;另外也可以查看源码根目录的CMakeLists.txt,里面定义了所有可选模块的清单。
2. 仅使用imread函数,编译OpenCV时如何禁用其他模块?
首先得明确:imread属于imgcodecs模块,而imgcodecs依赖于core模块(核心功能模块,必须保留),所以我们只需要保留这两个模块,禁用其他所有模块即可。
具体编译配置步骤:
- 先创建一个单独的build目录,进入目录后执行cmake命令,用以下参数精准控制模块:
- 如果你的OpenCV版本是3.4及以上,推荐用
BUILD_LIST参数直接指定要编译的模块,这是最简便的方式:cmake -DBUILD_LIST=core,imgcodecs <你的OpenCV源码路径> - 如果是更早的版本,需要逐个禁用其他模块,同时手动开启需要的模块:
这里的cmake -DBUILD_opencv_core=ON -DBUILD_opencv_imgcodecs=ON -DBUILD_opencv_*=OFF <你的OpenCV源码路径>BUILD_opencv_*=OFF会禁用所有以opencv_开头的模块,再单独开启必需的core和imgcodecs。
- 如果你的OpenCV版本是3.4及以上,推荐用
- 完成cmake配置后,用
make -j$(nproc)(Linux/macOS)或者对应的编译命令完成编译安装即可。
额外提醒:imgcodecs模块默认支持JPG、PNG等常见图像格式,如果不需要某些格式,可以额外添加参数禁用对应依赖库(比如-DWITH_JPEG=OFF),但如果只是需要基础的imread功能,保持默认配置就足够。
内容的提问来源于stack exchange,提问作者mrgloom
相关产品推荐
相关产品推荐

