由于本人也不是专业c++用户,因此在首次vscode opencv c++版本配置过程中遇到了很多问题,为了做一个记录,也想将经验分享给其他人,因此写了一个文本,希望能帮助其他朋友。
1.安装opencv
最先尝试的是使用homebrew方式安装,这也是网上用的最多的方法,比较傻瓜式。我最开始也是用的这种方法,安装过程中并没有出现什么问题。但是在脚本中导入模块头文件的时候一直显示找不到头文件,因此无奈之下尝试了第二种方法。但是这里也将第一中方法贴出来。
1.1. brew安装
#准备工作,如果已经安装则跳过。
brew install pkg-config
brew install wget
brew install cmake
#终端中输入一下代码,可以一行一行输入。
#或者opencv来安装最新版本。
brew install opencv@3
#然后配置一些环境变量
export PATH="/usr/local/opt/opencv@3/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/opencv@3/lib"
export CPPFLAGS="-I/usr/local/opt/opencv@3/include"
export PKG_CONFIG_PATH="/usr/local/opt/opencv@3/lib/pkgconfig"
1.2. 编译安装
#从github clone,建议clone在home/local目录下。
git clone -b 3.4 https://github.com/opencv/opencv.git
cd opencv
#在opencv创建build文件夹,会用来放编译后的结果。
mkdir build
cd build
#注意下一步最后有两个点。
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
#make一下,时间很长,等一下。
make -j8
make install
#完成后使用该指令可查看是否成功安装opencv。如果成功,则会出现很多package信息。例如:
#-I/usr/local/include/opencv -I/usr/local/include -L/usr/local/lib -lopencv_dnn -#lopencv_highgui -lopencv_ml -lopencv_objdetect -lopencv_shape -lopencv_stitching -#lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_videoio -#lopencv_imgcodecs -lopencv_features2d -lopencv_video -lopencv_photo -#lopencv_imgproc -lopencv_flann -lopencv_core
pkg-config --cflags --libs opencv
1.2.1. 如果没有问题,最后还需要配置环境变量。
#使用vim文本编辑器进入.bash_profile
vim ~/.bash_profile
#打开文件后,按 i 编辑模式,然后将下面几行粘贴进去。可以粘贴在最下边。
export LIBRARY_PATH=/usr/local/lib/:$LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/lib$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
export C_INCLUDE_PATH=/usr/local/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/usr/local/include:$CPLUS_INCLUDE_PATH
粘贴完成后按ESC,退出编辑模式,然后按冒号:再按wq!保存退出。
1.2.2. 进行一个简单测试
首先创建一个.cpp文件,比如main.cpp里边用到了opencv的库,比如#include <opencv2/higngui.hpp>
然后执行编译,如果正常生成.o 文件则没有大问题。至于说没有大问题,是因为将opencv导入到vs code中也是很容易出错。
g++ $(pkg-config --cflags --libs opencv) main.cpp -o main
2. 在vscode中使用opencv。
首先要建立工程,并且打开四个.json工程文件(其实只有两个需要改。),如何打开可以根据如下的视频。看前几分钟即可,因为真实配置会有不同。首先提一下,选择编译器时,我选的是 g++,后面不带版本号,例如g++-11。可能其他的也行,没有试,后面可能会试一下。
vscode配置opencv环境,以及一些简单函数_哔哩哔哩_bilibili
首先更改c_cpp_properties.json文件。只需要改“includePath”这里,default后面全是新加的。
{
"configurations": [
{
"name": "Mac",
"includePath": [
"${default}",
"/usr/local/include/**",
"/usr/local/include/**",
"/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/**",
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/**",
"/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/**",
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/**",
"/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/**"
],
"defines": [],
"macFrameworkPath": [],
"compilerPath": "/usr/local/bin/gcc-11",
"cStandard": "gnu17",
"cppStandard": "gnu++17",
"intelliSenseMode": "macos-gcc-x64"
}
],
"version": 4
}
具体怎么找到新加的这些信息?命令行中输入:
gcc -v -E -x c++ -
终端打印信息的最后会出现如下信息,然后将这些信息进行复制,然后加上冒号和/**, 像我的例子中那样,然后进行粘贴即可。
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory)
其次更改了task.json文件。由于只更改了args:[]这里,所以只将这里复制过来。具体添加为后面标着‘#新’的几行。
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}",
"`pkg-config",#新
"--libs", #新
"--cflags",#新
"opencv`"#新
],
3. 最终测试
新建一个脚本,然后点击CTRL+F5运行。成功运行会在新窗口展示图片。因为添加了code-runner,也用右上角的三角运行键试了,但是报错,感觉是找不到opencv2库文件。不知道为什么,如果有大佬后面可以回复一下。
#include <iostream>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main(){
cout<<"jianchao"<<endl;
Mat image = imread("/Users/cijianchao/Downloads/opencv-logo.png");
imshow("opencv", image);
waitKey(0);
return 0;
}