一、安装 OpenCV 4.5.4

安装方法有两种:

  1. 下载源代码编译
  2. Homebrew

具体安装步骤请见:
https://blog.csdn.net/qq_42067550/article/details/122044894?spm=1001.2014.3001.5502

二、配置 OpenCV

通常来说安装不会出什么问题,大多数遇到问题的都会在配置这里。
随便写个实验代码,发现在引入头文件的时候就会出错:

#include "opencv2/core.hpp"

报错提示:

no such file

找不到头文件,说明配置出了问题。
不像在 visual studio 或者 xcode 里面,有专门的设置窗口让你添加 include 的路径,在 vscode 中,需要根据项目建立单独的配置文件。

包含了以下3个最重要的:

  • c_cpp_properties.json
  • launch.json
  • tasks.json

这三个文件需要存放在项目文件夹下面的 .vscode 文件夹内。

虽然下面我会把这个三个文件的代码附上,但是对于配置遇到报错的小伙伴,务必理清楚这三个文件的逻辑关系,会对于定位错误非常有帮助!

以下附上的是我自己通过漫长的 debug 过程,总结出来的个人理解,不一定精确,但是应该可以给遇到困难的朋友一些灵感和启发。

c_cpp_properties.json

这个文件的作用是配置 vscode 配置整体的 C++ 的环境,就是你要告诉你的 vscode IDE,我有哪些需要进行 include 的
头文件 .hpp 和库文件 .lib,我把这个理解为一个准备工作。

这里主要注意两点:

  • “includePath” 后面就是放的就是头文件和库文件所在的路径,每个人的情况不同,可以把下面的路径输入进去查找一下有没有对应的文件,以进行确认。
  • 后面的两个星号 ** 表示递归查找,就是查找目标目录的同时,该目录下的子目录也一并查找。

文件内容:

{
    "configurations": [
        {
            "name": "Mac",
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/local/Cellar/opencv/4.5.4/lib/**",
	            "/usr/local/Cellar/opencv/4.5.4/include/opencv4/"
            ],
            "defines": [],
            "macFrameworkPath": [],
            "compilerPath": "/usr/local/bin/gcc-11",
            "cStandard": "gnu17",
            "cppStandard": "gnu++17",
            "intelliSenseMode": "macos-gcc-x64"
        }
    ],
    "version": 4
}

launch.json

这个是 vscode 用于调试的配置文件,比如指定调试语言环境,指定调试类型等。

这里最重要的是 "preLaunchTask" 的设置,表示在运行这个调试之前,需要告诉编译器哪些前置条件。其实也就是把 tasks.json 关联进来。

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        
        {
            "name": "g++-11 - 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "lldb",
            "preLaunchTask": "C/C++: g++-11 生成活动文件"
        }
    ]
}

tasks.json

这个文件是编译的配置,设置你在编译的过程中需要用到哪些库文件和头文件,用什么编译器,用什么编译方式等,都可以在这里进行设置。

这里的关键在于 "label" 的设置一定要和 launch.json 中的 "preLaunchTask" 一致!

pkg-config 部分设置可以参考:
https://blog.csdn.net/qq_42067550/article/details/122044894?spm=1001.2014.3001.5502

{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "cppbuild",
			"label": "C/C++: g++-11 生成活动文件",
			"command": "/usr/bin/clang++",
			"args": [
				"-std=c++17",//使用C++17
				"-stdlib=libc++",
				"-g",
				"${file}",
				"-o",
				"${fileDirname}/${fileBasenameNoExtension}",
				"`pkg-config",
				"--libs",
				"--cflags",
				"opencv4`"
			],
			"options": {
				"cwd": "${workspaceFolder}"
			},
			"problemMatcher": [
				"$gcc"
			],
			"group": {
				"kind": "build",
				"isDefault": true
			},
			"detail": "C/C++: g++-11 生成活动文件"
		}
	]
}

三、测试代码

配置完成后,在项目目录下放一张图片,然后可以使用以下代码进行测试:

#include <iostream>
#include <vector>
#include <string>
#include "opencv2/opencv.hpp"
#include "opencv2/highgui.hpp"

using namespace std;
using namespace cv;

int main (){

Mat img = imread("./dog.jpeg");
if(!img.data) {
    cout<<"couldn't load the image";
    return -1;
}
else{
    cout<<"loaded the image";
    imshow("img",img);
} 

while(true)
{
    int c = waitKey(20);
    if(27==(char) c)
    break;
}
    return 0;
}       

显示图片成功:
在这里插入图片描述
按下 esc 键退出。

四、可能遇到的问题

可能遇到 no such file 的报错,参考:
https://blog.csdn.net/qq_42067550/article/details/122636151

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐