机器:MacBook Pro M4 Max
工具:Homebrew 4.4.13、cmake 3.31.3、CLion 2024.3.1.1
本文主要介绍两种方式的OpenCV C++的环境搭建,Homebrew、cmake、CLion的安装可以自行查阅网上教程,国内的限制主要是网络因素,使用科学上网方式提高效率。
1. 第一种方式,使用Homebrew。
命令行工具中输入brew info opencv即可。
这种方式比较简单,注意在apple M处理器的机器上安装路径默认在/opt/homebrew/Cellar/opencv/下(访达中使用command+shift+G搜索)。
缺点是耗时,技巧:科学上网+选择用网人少的时候(晚上),掌握技巧的话一个小时就完成安装。检查是否成功安装的命令brew info opencv。
这里要注意apple M处理器和apple Intel处理器的机器安装opencv时,opencv安装路径有所不同,不过对于只使用opencv的api进行开发使用没有影响(个人观点)。
apple M处理器的opencv安装路径
apple Intel处理器的opencv安装路径
2. 第二种方式是直接下载opencv官网的源码,使用cmake编译。
准备源码opencv和opencv_contrib 下载地址github.com/opencv
本文选择4.9.0版本的源码下载
opencv:github.com/opencv/open…
opencv_contrib:github.com/opencv/open…
下载后解压。
打开命令行执行工具进入源码文件夹opencv-4.9.0,新建文件夹build,再进入build
cd opencv-4.9.0
mkdir build
cd build
接下来就是进行Cmake编译了。
cmake -D CMAKE_SYSTEM_PROCESSOR=arm64 -D CMAKE_OSX_ARCHITECTURES=arm64 -D WITH_OPENJPEG=OFF -D WITH_IPP=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=XXXXXXXX/opencv-src -D OPENCV_EXTRA_MODULES_PATH=XXXXXXXX/opencv-src/opencv_contrib-4.9.0/modules -D PYTHON3_EXECUTABLE=/opt/homebrew/bin/python3 -D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=ON -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=OFF -D OPENCV_ENABLE_NONFREE=ON -D BUILD_EXAMPLES=ON -D BUILD_ZLIB=OFF ..
其中CMAKE_SYSTEM_PROCESSOR=arm64和CMAKE_OSX_ARCHITECTURES=arm64表示M处理的arm64架构;
CMAKE_INSTALL_PREFIX的路径是编译好的OpenCV安装路径,可以自定义,本文指定到了下载源码所在的文件夹opencv-src;
OPENCV_EXTRA_MODULES_PATH表示opencv_contrib源码目录的modules文件夹;
PYTHON3_EXECUTABLE这个表示你的python3安装路径,同时开启BUILD_opencv_python3=ON。
Cmake编译结果截图
完成CMake编译后,再进行make编译了,只需要输入一下指令make -j16即可,-j16表示用16个核心进行编译,可以根据电脑配置自行定义,数值越大编译越快。我直接拉满16核,第一次听到电脑风扇转动,666
make编译完成后执行,输入一下安装指令make install。大功告成。
在下面的demo中要使用到路径/XXXXXXXXXXX/opencv-src/lib/cmake/opencv4
使用Clion新建C++工程
新建好项目DemoOpenCV工程,会自动生成两个文件CMakeLists.txt和main.cpp,只是简单实践一下上面编译好的opencv源码是否正确,所以这里使用Clion新建工程和运行都比较方便。
配置好CMakeLists.txt,其中OpenCV_DIR的路径就是上面编译得到的/XXXXXXXXXXX/opencv-src/lib/cmake/opencv4。配置后要Sync一下!!!
main.cpp中代码简单的读取图片、会读处理、显示图片,使用一张opencv的经典图片lena.jpg
#include <iostream>
#include "opencv2/opencv.hpp"
using namespace cv;
int main() {
std::cout << "Hello and welcome to OpenCV C++!\n";
Mat image = imread("../lena.jpg");
if (!image.empty())
{
std::cout << "image is OK!" << std::endl;
}else{
std::cout << "image is empty!" << std::endl;
return 0;
}
std::cout << "图像的宽度是:" << image.rows << std::endl;
std::cout << "图像的高度是:" <<image.cols << std::endl;
std::cout << "图像的通道数是:" << image.channels() << std::endl;
Mat image1;
cvtColor(image,image1,COLOR_RGB2GRAY);
imshow("image",image);
imshow("image1",image1);
waitKey(0);
std::cout<<"hello opencv end"<<std::endl;
return 0;
}
run一下结果如下
程序正常运行,说明本文编译opencv源码正确!下面就可以使用OpenCV提供的API干活了。