一、环境准备
1.使用HomeBrew安装cmake
brew install cmake
2.获取OpenCV源代码
可以到官方下载页下载稳定版本
PS:我这里下载的是最新版本 4.3.0 ,刚开始也就纠结该用哪个版本,但既然是从头开始学,那就直接上手最新的版本,不然和咸鱼有什么分别~手动捂脸!
从git仓库克隆
git clone https://github.com/opencv/opencv.git git clone
https://github.com/opencv/opencv_contrib.git
3. 构建OpenCV
3.1 在源码目录中创建一个临时目录,这里会存放一下cmake编译生成的文件
cd~ / opencv mkdir build
3.2 配置
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
如果需要同时配置编译 opencv-contrib-4.3.0的话(opencv和opencv-contrib的版本要一致),就用这个
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/Users/ing/opencv_contrib-4.3.0/modules ..
------------------------------指令解释------------------------------
在安装opencv的时候,会用:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
这句话什么意思呢?
在build文件中输入:
cmake -D CMAKE_BUILD_TYPE=RELEASE
这样产生的makefile文件make生成的可执行文件就带有调试信息,供gdb和gdbserver使用了。
CMAKE_BUILD_TYPE的值可以为Release或者Debug。
CMAKE_INSTALL_PREFIX=/usr/local ..
INSTALL 指令用于定义安装规则,安装的内容可以包括目标二进制、动态库、静态库以及文件、目录、脚本等。 这里就是提前设置好编译到的路径!
3.3 构建安装
make -j16#并行运行16个线程
sudo make install
PS
在编译过程中有一个报错:
[ 66%] Building CXX object modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/pct_signatures_sqfd.cpp.o
[ 67%] Building CXX object modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/sift.cpp.o
/Users/ing/opencv_contrib-4.3.0/modules/xfeatures2d/src/boostdesc.cpp:654:20: fatal error: 'boostdesc_bgm.i' file not found
#include "boostdesc_bgm.i"
^~~~~~~~~~~~~~~~~
[ 70%] Built target opencv_test_imgproc
[ 70%] Building CXX object modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/stardetector.cpp.o
搜索了下结果是缺少必要的文件:
boostdesc_bgm.i
boostdesc_bgm_bi.i
boostdesc_bgm_hd.i
boostdesc_lbgm.i
boostdesc_binboost_064.i
boostdesc_binboost_128.i
boostdesc_binboost_256.i
vgg_generated_120.i
vgg_generated_64.i
vgg_generated_80.i
vgg_generated_48.i
下载
以上文件,拷贝到opencv_contrib/modules/xfeatures2d/src/ 路径下即可
然后执行
make clean
make -j16
mmp,又又报错了:
fatal error: features2d/test/test_detectors_regression.impl.hpp: 没有那个文件或
目录
头文件include地址不对,解决方法如下:
将opencv-4.3.0/modules/features2d/test/文件下的
test_descriptors_regression.impl.hpp
test_detectors_regression.impl.hpp
test/test_detectors_invariance.impl.hpp
test_descriptors_invariance.impl.hpp
test_invariance_utils.hpp
拷贝到
opencv_contrib-4.3.0/modules/xfeatures2d/test/文件下。
同时,将opencv_contrib-4.3.0/modules/xfeatures2d/test/test_features2d.cpp文件下的
#include "features2d/test/test_detectors_regression.impl.hpp"
#include "features2d/test/test_descriptors_regression.impl.hpp"
改成
#include "test_detectors_regression.impl.hpp"
#include "test_descriptors_regression.impl.hpp"
将opencv_contrib-4.3.0/modules/xfeatures2d/test/test_rotation_and_scale_invariance.cpp文件下的
#include "features2d/test/test_detectors_invariance.impl.hpp"
#include "features2d/test/test_descriptors_invariance.impl.hpp"
改成
#include "test_detectors_invariance.impl.hpp"
#include "test_descriptors_invariance.impl.hpp"
再次执行
make clean
make -j16
没有报错
至此OpenCV在MAC上算安装完毕了。
二、测试
安装好 OpenCV 后,在 /usr/local/lib 下能看到这样的文件这说明已经安装成功了
接下来是运行,使用的ide是Clion, 废了很大劲儿才找到的破解版,在线破解,必须联网才能用,凑合着用吧, 谁让咱穷。
新建一个项目:
然后一路next,创建成功后,配置cmakelist.txt文件:
cmake_minimum_required(VERSION 3.15)
project(HelloOpencv)
set(CMAKE_CXX_STANDARD 14)
#find_library(OpenCv)
find_package(OpenCV)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(HelloOpencv main.cpp)
target_link_libraries(HelloOpencv ${OpenCV_LIBS})
PS:至于cmakelist的语法,还是建议学一学的,我也在学ing, 可参考https://www.hahack.com/codes/cmake/
或者
http://c.biancheng.net/view/7097.html
这里不过多赘述。
配置完成后,在main.cpp里输入以下内容,实现显示一张照片及显示灰度化后的:
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() {
Mat srcImage = imread("/Users/ing/Downloads/ing.png");
if(!srcImage.data){
cout<<"Image not loaded";
return -1;
}
namedWindow("origin",WINDOW_AUTOSIZE);
imshow("[origin]",srcImage);
Mat gray;
cvtColor(srcImage,gray,COLOR_RGBA2GRAY);
namedWindow("gray");
imshow("[gray]",gray);
waitKey(0);
return 0;
}
运行效果如下: