1. 准备
- 从github获取opencv和opencv_contrib源码,前者为opencv核心库后者为未被收录的一些新颖和实用的模块
cd ~/<你的代码存放目录>
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
- 检查自己机器的环境,看是否满足最低要求,此处为4.10.0版本的要求
- CMake>=3.9
- 检查CMake版本
cmake --version
- 检查CMake版本
- Git
- Python >= 2.7 且 Numpy >= 1.5
- CMake>=3.9
2. 编译安装
- 配置
cd ~/<你的代码存放目录>/opencvmkdir buildcd buidcmake -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=ON -DBUILD_DOCS=ON -DOPENCV_EXTRA_MODULES_PATH=~/<你的代码目录>/opencv_contrib-4.10.0/modules -DCMAKE_INSTALL_PREFIX=/usr/local/opencv_4.10.0 ../- -D 为定义一个CMake变量
- CMAKE_BUILD_TYPE : Release or Debug
- Release
- 优化:Release构建类型旨在最大程度地优化代码以提高性能。它通常会启用各种编译器优化选项,例如函数内联、循环展开和代码消除,以生成更小且执行速度更快的可执行文件。
- 调试信息:为了减小可执行文件的大小和提高运行效率,Release版本通常会禁用调试符号和额外的调试功能。这意味着,与Debug版本相比,Release版本的可执行文件更难以进行调试。
- 使用场景:Release版本适合在最终部署到生产环境或进行性能测试时使用。
- Debug
- 优化:与Release版本不同,Debug构建类型通常用于开发和调试阶段。为了保留变量和函数的实际布局并方便调试,Debug版本通常不会进行优化或只进行最低级别的优化。
- 调试信息:Debug版本包含了调试符号和额外的调试功能,例如运行时检查和断言。这些调试信息使得开发人员能够在调试器中更容易地定位和分析问题。
- 生成文件:在Debug模式下,编译器还会生成一些辅助文件,如调试信息文件(如Windows系统中的.pdb文件),以便在调试时使用。
- 使用场景:Debug版本适合在开发过程中进行代码调试和测试。
- Release
- BUILD_EXAMPLES: 是否构示例代码
- BUILD_DOCS:是否构建代码
- OPENCV_EXTRA_MODULES_PATH:扩展模块路径
- CMAKE_INSTALL_PREFIX:install时的安装路径
- 编译
make -j7 # 用七个并行线程去编译
- 安装
sudo make install
- 配置环境变量
vi ~/.zshrc根据你的shell决定
export OPENCV_HOME=/usr/local/opt/opencv
export PATH=$OPENCV_HOME/bin:$PATH
export PKG_CONFIG_PATH=$OPENCV_HOME/lib/pkgconfig:$PKG_CONFIG_PATH
export CPLUS_INCLUDE_PATH=$OPENCV_HOME/include:$CPLUS_INCLUDE_PATH
export LIBRARY_PATH=$OPENCV_HOME/lib:$LIBRARY_PATH
2. `source ~/.zshrc`
3.验证
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
int main(int argc, char** argv) {
Mat image = imread("/<图片路径>");
if (image.empty()) {
std::cout << "Could not open or find the image" << std::endl;
return -1;
}
namedWindow("Display window", WINDOW_AUTOSIZE);
imshow("Display window", image);
waitKey(0);
return 0;
}
注:CMake文件中要配置 find_package(OpenCV)并通过OpenCV_DIR=<path_to_build_or_install_directory> 来指明路径