之前在win10的vscode上搭建过opencv环境,这次试了下Mac下的,虽然踩坑不少,但最终还是成功了。下面是具体步骤:

一、Homebrew的安装

我试了官网下的安装代码,虽然能成功,但是速度很慢,而且有几个环境因为墙的原因,没有下载。最后我用的是清华大学的镜像。
教程可以参考:清华大学镜像安装homebrew

二、利用Homebrew安装opencv

有三个步骤:

brew install wget
brew install cmake
brew install opencv

如果下载速度很慢,可以尝试连上手机热点等方式,避免在学校校园网环境下下载(有墙)。
如果卡在

Updating Homebrew...

这个界面,可以直接按ctrl+c跳过,不影响后续下载。而且若是下载过程中进度条卡住了,可以ctrl+z终止,然后重新输入一下指令,会接着上次的断点继续下载。

检查安装结果

brew info opencv

输出如下:

homebrew 安装MongoDB homebrew 安装vscode_opencv


如果有打红叉的,说明那个没有被安装,可以单独对他用一下brew install

三、配置VScode+opencv

Vscode配置c/c++环境在这里就不多说了,网上有很多。这里贴出我的四个json文件代码:

1.c_cpp_properties.json

{
    "configurations": [
        {
            "name": "Mac",
            "includePath": [
                "${workspaceFolder}/**",
                "/Library/Developer/CommandLineTools/usr/include/c++/v1",
                "/usr/local/include",
                "/Library/Developer/CommandLineTools/usr/lib/clang/9.0.0/include",
                "/usr/local/Cellar/opencv/4.2.0_1/include",
                "/usr/local/Cellar/opencv/4.2.0_1/lib",
                "/usr/local/Cellar/opencv/4.2.0_1/include/opencv4",
                "/Library/Developer/CommandLineTools/usr/include",
                "/usr/include",
            ],
            "defines": [],
            "macFrameworkPath": [
                "/System/Library/Frameworks",
                "/Library/Frameworks"
            ],
            "compilerPath": "/usr/bin/clang",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64"
        }
    ],
    "version": 4
}

2.launch.json

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "c/c++ Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}.out",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "lldb",
            "preLaunchTask": "c++"
        }
    ]
}

3.tasks.json

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "c++",
            "command": "clang++",
            "type": "shell",
            "args": [
                "${file}",
                "-std=c++11",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}.out",
                "-I",
                "/usr/local/Cellar/opencv/4.2.0_1/include/opencv4/opencv",
                "-I",
                "/usr/local/Cellar/opencv/4.2.0_1/include/opencv4",
                "-L",
                "/usr/local/Cellar/opencv/4.2.0_1/lib",
                "-l",
                "opencv_gapi",
                "-l",
                "opencv_stitching",
                "-l",
                "opencv_aruco",
                "-l",
                "opencv_bgsegm",
                "-l",
                "opencv_bioinspired",
                "-l",
                "opencv_ccalib",
                "-l",
                "opencv_dnn_objdetect",
                "-l",
                "opencv_dnn_superres",
                "-l",
                "opencv_dpm",
                "-l",
                "opencv_highgui",
                "-l",
                "opencv_face",
                "-l",
                "opencv_freetype",
                "-l",
                "opencv_fuzzy",
                "-l",
                "opencv_hfs",
                "-l",
                "opencv_img_hash",
                "-l",
                "opencv_line_descriptor",
                "-l",
                "opencv_quality",
                "-l",
                "opencv_reg",
                "-l",
                "opencv_rgbd",
                "-l",
                "opencv_saliency",
                "-l",
                "opencv_sfm",
                "-l",
                "opencv_stereo",
                "-l",
                "opencv_structured_light",
                "-l",
                "opencv_phase_unwrapping",
                "-l",
                "opencv_superres",
                "-l",
                "opencv_optflow",
                "-l",
                "opencv_surface_matching",
                "-l",
                "opencv_tracking",
                "-l",
                "opencv_datasets",
                "-l",
                "opencv_text",
                "-l",
                "opencv_dnn",
                "-l",
                "opencv_plot",
                "-l",
                "opencv_videostab",
                "-l",
                "opencv_videoio",
                "-l",
                "opencv_xfeatures2d",
                "-l",
                "opencv_shape",
                "-l",
                "opencv_ml",
                "-l",
                "opencv_ximgproc",
                "-l",
                "opencv_video",
                "-l",
                "opencv_xobjdetect",
                "-l",
                "opencv_objdetect",
                "-l",
                "opencv_calib3d",
                "-l",
                "opencv_imgcodecs",
                "-l",
                "opencv_features2d",
                "-l",
                "opencv_flann",
                "-l",
                "opencv_xphoto",
                "-l",
                "opencv_photo",
                "-l",
                "opencv_imgproc",
                "-l",
                "opencv_core",
                "-g"
            ],
            "presentation": {
                "echo": true,
                "reveal": "always",
                "focus": false,
                "panel": "shared"
            }
        }
    ]
}

中间那特别长的一溜通过指令获得:

pkg-config --cflags --libs opencv4

得到如下结果:

homebrew 安装MongoDB homebrew 安装vscode_c++_02


值得注意的是,在arg[]里面有一句

"args": [
                "${file}",
                ....
        ]

这个${file}能避免每次编译运行都要更改program名字的繁琐

settings.json

{
    "python.pythonPath": "/Users/yunyi/opt/anaconda3/bin/python",
    //settings.json
    "code-runner.executorMap": {
        "c": "cd $dir && make  && ./$fileNameWithoutExt && make clean",
        "cpp": "cd $dir && make  && ./$fileNameWithoutExt && make clean"
    },
    "editor.renderWhitespace": "all",
    "editor.renderLineHighlight": "all",
    "editor.formatOnSave": true,
    "code-runner.runInTerminal": true,
    "code-runner.ignoreSelection": true,
    "code-runner.enableAppInsights": false,
    "C_Cpp.updateChannel": "Insiders",
    "[makefile]": {
        "editor.insertSpaces": true
    },
    "C_Cpp.default.includePath": [
        "/usr/local/Cellar/opencv/4.2.0_1/include"
    ]
}

四、测试

代码:

#include <iostream>
#include <opencv4/opencv2/core.hpp>
#include <opencv2/highgui.hpp>
using namespace cv;
using namespace std;
int main()
{
    cout << "nihao" << endl;
    Mat img = imread("/Users/yunyi/Desktop/timg.jpeg", IMREAD_GRAYSCALE);
    imshow("imgIuput", img);
    waitKey(0);
    destroyAllWindows();
    return 0;
}

输出:

homebrew 安装MongoDB homebrew 安装vscode_brew_03


homebrew 安装MongoDB homebrew 安装vscode_opencv_04


如果发生头文件无法打开的情况,看一下你的包含路径includePath有没有错,以及刚才那一大溜有没有错

homebrew 安装MongoDB homebrew 安装vscode_brew_05