VsCode 上的Opencv(C++)环境配置(Linux)
1.下载Opencv
1.新建文件demo_cpp,在demo_cpp中新建third_parties文件
2.OPENCV官网下载OpenCV-4.12.0
3.将下载好的opencv-4.12.0.zip压缩包在third_parties中解压,
//以下均无特殊说明,均在vscode里的TERMINAL中输入
sudo apt-get install unzip//用于解压.zip文件
cd third_parties//切换到third_parties文件中
unzip opencv-4.12.0.zip//解压opencv-4.12.0.zip到当前目录
cd opencv-4.12.0//切换到opencv-4.12.0文件中
4.在解压后的opencv-4.12.0文件中新建build文件
mkdir build//新建build文件
cd build//切换到build文件夹中
5.在TERMINAL中输入cmake
cmake ..//使用 ../CMakeLists.txt 文件作为起始点在当前目录中生成makefile
6.cmake成功执行后在terminal中输入make
7.在新建demo_cpp文件中新建CMakeLists.txt配置文件
2.配置文件调用Opencv库
编辑CMakeLists.txt配置文件
2.1 声明 CMake 版本和项目名
- 指定本项目中cmake最低版本.查询cmake版本方法:使用快捷键(CTRL ALT T)调出终端,中输入cmake --version.
cmake_minimum_required(VERSION 3.22.1)
- 定义项目名称并指定项目使用的编程语言,名字会被保存在一个叫 PROJECT_NAME 的 CMake 变量中
project(demo_cpp LANGUAGES CXX)
2.2定位库路径
通过set和find_package找到 OpenCV 库的位置和配置。
- 手动设置一个名为 OpenCV_DIR 的 CMake 变量,并将其值设置为指定的路径.
./third_parties/opencv-4.12.0/build/ 是OpenCV_DIR这个变量被赋予的值。这是一个相对路径,它基于运行 cmake 命令的当前目录(通常是项目根目录),指向一个名为 third_parties 的文件夹下的 OpenCV 都build目录。这个很关键,如果没有标准安装Opencv到系统标准路径,CMake无法找到他.这个指令告诉CMake,我想要的OpenCV就在这,别去其他地方找了.
set(OpenCV_DIR ./third_parties/opencv-4.12.0/build/)
- 查找配置文件
根据OpenCV_DIR指定的路径来寻找Opencv的配置文件(OpenCVConfig.cmake)。find_package是CMake用来寻找外部依赖包的核心指令,CMake根据OpenCV这个名字去寻找FindOpenCV.cmake或者OpenCVConfig.cmake.
REQUIRED是表示这个依赖是必须的关键字,如果CMake在任何路径上都找不到OpenCV的配置文件,会报错.如果成功找到,会定义CMake变量:OpenCV_INCLUDE_DIRS,包含了 OpenCV 所有头文件 (.hpp) 的目录路径.OpenCV_LIBS包含所有需要链接的OpenCV库文件名称列表
find_package(OpenCV REQUIRED)
- 配置编译
通过include_directories告诉编译器去哪里找头文件。
将指定的目录添加到编译器的头文件搜索路径中,告诉编译器除了标准路径,也要到这些目录里去找头文件.${OpenCV_INCLUDE_DIRS}是变量引用语法。CMake 会将其替换为find_package(OpenCV)功后自动设置的变量值(即 OpenCV 头文件的实际路径).
如果出现报错:fatal error: opencv2/opencv.hpp: No such file or directory,请检查这个文件,他让编译器知道头文件还可以在哪.
include_directories(${OpenCV_INCLUDE_DIRS})
- 定义执行的文件
通过add_executable声明要生成什么可执行文件,用什么源文件生成。
cpp.add_executable()用于创建可执行文件目标,main是目标名称,src/main.cpp是构建这个可执行文件依赖的源文件
add_executable(main src/main.cpp)//告诉cmake生成一个main的可执行文件,他的源代码是src/main.
- 配置链接
通过target_link_libraries告诉链接器需要连接哪些第三方库。
指定可执行文件在链接(Linking)阶段需要连接哪些库.target_link_libraries()用于将库链接到指定的目标(这里是main),main是add_executable()定义的目标名称.${OpenCV_LIBS}是变量引用,可告诉链接器需要接的第三方库.
target_link_libraries(main ${OpenCV_LIBS})
运行 cmake
命令时,它就是根据这份“说明书”来生成 Makefile
。随后当你运行 make
时,编译器 (g++
) 和链接器 (ld
) 就会根据 Makefile
中的具体指令,调用你在 CMakeLists.txt
中设置的路径和库,最终编译链接出 main
这个可执行文件。
3.使用库
在命令行中使用库
1.回到根目录下~/project/demo_cpp
2.切换到根目录下的build中,如果没有build,使用mkdir build新建一个.
3.输入cmake .. ,完成后输入make
4.选则CMake:Configure运行
4.运行可能出现的报错
main()函数
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{auto picture1 = imread("../picture.jpeg");//读取名称为picture.jpeg的照片Mat graymat;cvtColor(picture1, graymat, COLOR_BGR2GRAY)//将picture变灰,数据存在graymat中imwrite("grey.jpeg", graymat);//将数据输出为图片,命名为grey.jpegMat image = imread("grey.jpeg");//读取这个图片if(image.empty()){printf("could not open or find picture");return -1;}imshow("grey.jpeg", image);//在屏幕上输出image图片}
- 错误1:使用imshow函数时可能会发生报错"/home/vboxuser/project/demo cpp/build/mainterminate called after throwing an instance of 'cv::Exception'what():OpenCV(4.12.0)/home/vboxuser/project/demo_cpp/third parties/opencv-4.12.0/modules/highgui/src/window.cpp:1284: error: (-2:Unspecifed error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support, If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-confg, then re-run cmake or confgure script infunction 'cvNamedWindow'"
错误表明OPenCV高阶图形界面功能未正常实现,通常是由于缺少GTK+等GUI库支持导致的.
解决办法:
第一步:在CTRL ALT T调出终端中输入
sudo apt-get install libgtk2.0-dev pkg-config
sudo apt-get install libgtk-3-dev
第二步:进入Opencv源码目录的build文件夹,输入
cmake -DWITH_GTK=ON -DWITH_GTK_2_X=ON ..
make -j$(nproc)
sudo make install
- 错误2:/usr/bin/gcc -fdiagnostics-color=always -g /home/vboxuser/project/demo cpp/src/main.cpp -o /home/vboxuser/project/demo cpp/src/main; /home/vboxuser/project/demo cpp/src/main.cpp:1:10: fatal error: opencv2/opencv.hpp: No such file or directory
原因:运行时使用右上角的运行按钮
解决方法:
1.安装CMake插件
2.CTRL SHIFT P调出命令面板,输入CMake:Configure,鼠标点击,选则.
3.此时界面底端出现CMake Tools 插件提供的 Build、Run和debug.用这3个按钮编译\调试\运行程序,不要使用右上角的运行按钮.
注:对于 CMake 管理的项目,请你忘记所有其他的运行方式,始终只使用 VS Code 底部状态栏由 CMake Tools 插件提供的 Build、Run和 Debug按钮来编译、运行和调试你的程序,把右上角的那个运行按钮忘掉,它不适用于复杂的 CMake 项目.-----阿彦社长
4.如果依然出现报错,CTRL ALT T,在终端中输入pkg-config --cflags opencv4,查找库所在位置
再打开隐藏文件.vscode中的c_pp_properties.json,编辑includePath,将查找到的路径添加进去
再添加配置"configurationProvider": "ms-vscode.cmake-tools"
- 错误3:点击debug时,会出现报错,WARN:0@0.049] global loadsave.cpp:275 findDecoder imread ('grey.jpeg'): can't open/read file: check file path/integrity could not open or find image[l] + Done"/usr/bin/gdb" --interpreter=mi.-tty=${DbgTerm} 0<"/tmp/Microsoft-MIEngine-In-trnvjfx.h3c" 1>"/tmp/Microsoft-MIEngine-0ut-13qxhr52.wlf"
原因:debug时,是在build下调试的,而auto picture1 = imread("picture.jpeg");是告诉CMAKE在当前目录寻找picture.jpeg文件.
解决方法:改为auto picture1 = imread("../picture.jpeg"),告诉Cmake去我当前所在路径的上一个文件中寻找picture.jpeg.或者将"../picture.jpeg"改为你存放照片的地址.