需要明白内在的编译逻辑,而不是表层现象。诸如此类问题今后有很多,不可能每次都翻箱倒柜,需要做的是从容面对,仔细分析,找出问题的根源所在。
话不多说,直接给出配置的具体方法,这是一个通用版本,只要你是使用的ubutu系统,且安装的是C++版本的opencv基本上都可以通过该方法来实现。
1 step:首先新建文件夹,并在该文件下创建cpp文件,然后使用vscode打开该文件夹。
2 step:利用ctrl+shift+p打开command line,寻找launch.json,找到后如下配置该文件。
1.去官网下载opencv,在本教程中选用的时opencv3.4.0,其他版本的配置方法异曲同工。
下载链接http://opencv.org/releases.html,选择sources版本
2.解压下载下来的zip包。你如果有图形界面,直接右击文件,就会有解压选项。
3.进入到解压后的文件包中
4.安装依赖库和cmake ,如果提醒需要apt-get update,那就先sudo su进入root权限(创建超级用户不会请自行百度),再sudo apt-get update,然后在执行下面命令
sudo apt-get install cmake
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev
5.安装完cmake之后执行命令 ,创建编译文件夹,不创建的会提示(如下图)
In-source builds are not allowed.
mkdir my_build_dir
cd my_build_dir
6.cmake一下(其实后面-D等等都是可选项,具体想了解是干嘛的,请参考博客:https://blog.csdn.net/u013066730/article/details/79411730)
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
注意:如果已经在新的文件夹中编译,但是还会出现之前的报错,把cmakecache.txt删了再编译就可
7.执行命令,漫长的编译过程
sudo make
8.执行命令
sudo make install
9.sudo make install 执行完毕后OpenCV编译过程就结束了,接下来就需要配置一些OpenCV的编译环境首先将OpenCV的库添加到路径,从而可以让系统找到
sudo gedit /etc/ld.so.conf.d/opencv.conf
执行此命令后打开的可能是一个空白的文件,不用管,只需要在文件末尾添加
/usr/local/lib
10.执行如下命令使得刚才的配置路径生效
sudo ldconfig
11.配置bash
sudo gedit /etc/bash.bashrc
在最末尾添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存,执行如下命令使得配置生效
source /etc/bash.bashrc
更新
sudo updatedb
12.至此所有的配置都已经完成
下面用一个小程序测试一下
找到
cd到opencv-3.4.0/smaples/cpp/example_cmake目录下
我们可以看到这个目录里官方已经给出了一个cmake的example我们可以拿来测试下
按顺序执行
cmake .
make
./opencv_example
即可看到打开了摄像头,在左上角有一个hello opencv
即表示配置成功
配置opencv,其实主要就解决两个问题,一个是头文件包含,一个是库文件搜索。头文件包含在c_cpp_properties.json中解决,库文件包含则要继续修改task.json中的编译命令。
首先来看c_cpp_properties.json:
怎么打开这个文件呢,两种方式,一个就是打开命令面板(还记得那个快捷键吗?我一直记,一直忘),然后搜索cpp: Edit,点击结果就可以进入这一文件。
另一种就是在自己的cpp文件里直接包含opencv库,聪明的cpp扩展会给你一个小提示提醒你打开c_cpp_properties.json设置头文件包含。
不说废话:
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/usr/local/include", //请确保你的opencv opencv2头文件夹安装在这个目录
"/usr/include"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
上一步解决头文件包含,这里就要解决库文件搜索,也简单,直接修改编译命令,也就是task.json中的args参数:
"args": [
"-g", "-std=c++11", "${file}", "-o", "${fileBasenameNoExtension}.o",// 设置动态链接库
"-I", "/usr/local/include",
"-I", "/usr/local/include/opencv",
"-I", "/usr/local/include/opencv2",
"-L", "/usr/local/lib",
"-l", "opencv_core",
"-l", "opencv_imgproc",
"-l", "opencv_imgcodecs",
"-l", "opencv_video",
"-l", "opencv_ml",
"-l", "opencv_highgui",
"-l", "opencv_objdetect",
"-l", "opencv_flann",
"-l", "opencv_imgcodecs",
"-l", "opencv_photo",
"-l", "opencv_videoio"
],// 编译命令参数
其中-I表示头文件目录,-L表示库文件目录,-l表示库文件。
reference link:
https://blog.csdn.net/u013066730/article/details/79411767
https://www.jianshu.com/p/6d3f4a30945d
https://blog.csdn.net/m0_37975258/article/details/101467438