第一次接触C++的opencv,需要在vscode中编写cv2代码并调试。根据vscode配置C++和Opencv(ubuntu18.04)能够正确配置,是一个靠谱的教程,现在记录一下过程,方面后续参考。
在终端中安装依赖:
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
# 下面是可选,我没有选
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
去官网下载sources源码,版本选择第二个(最新的可能存在不稳定或其他bug,选第二个可能会稳定点)
下载到本地后解压(最好不要存在中文或奇怪字符的路径),在命令行中进入opencv-version文件夹,创建并进入build文件夹mkdir build && cd build
,cmake编译cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_ENABLE_NONFREE=True ..
结束后执行make指令(当然可以多线程,先nproc命令查询你的线程数,我的是20,所以使用j15指定15个线程)sudo make j15
,这段等待时间较长。
完成后,指定sudo make install
即可
在cmake命令中设置了OPENCV_GENERATE_PKGCONFIG=ON
,素以在/usr/local/lib/pdkconfig
中生成了opencv4.pc文件,里面记录了opencv头文件、库文件的路径
,现在配置一下(应该是环境变量一类,将其暴露给全局变量)
通过sudo vim /etc/bash.bashrc
打开后在最后追加:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存退出后,更新source /etc/bash.bashrc
修改动态库:通过sudo vim /etc/ld.so.conf.d/opencv.conf
,在里面添加/usr/local/lib
,然后保存退出,再更新一下sudo ldconfig
#终端输入以下两命令,显示正常则安装成功
pkg-config --modversion opencv4 #查看版本号
pkg-config --libs opencv4 #查看libs库
除此之外,opencv源码提供了测试程序,位于opencv-version/samples/cpp/examples_cmake
,在终端进入该文件夹,然后:
mkdir build
cd ./build
cmake ..
make
./opencv_example 执行该可执行文件
会弹出一个框并显示“Hello OpenCV”
注意:在cmake阶段,如果cmake文件中需要opencv,则在编译时会打印找到的opencv路径,可以以此判断是否是期望的opencv版本
vscode安装不说了,现在在vscode中新建一个opencvtest.cpp文件,内容为:
#include
#include
using namespace std;
using namespace cv;
int main(int argc,char** argv){
// 注意这里修改成你的图片路径
Mat src = imread("test.jpeg",IMREAD_GRAYSCALE); //读取图片
if (src.empty()) { //判断是否找到图片
printf("没有找到图片 "); //输出文字
return -1;
}
else
{
namedWindow("input",WINDOW_AUTOSIZE);// 显示窗口命名为input ;WINDOW_AUTOSIZE显示大小为图片自定义大小,且不可以更改大小
imshow("input",src); //显示
waitKey(0);//显示的毫秒时间,如果函数参数<=0表示一直显示。>0表示显示的时间
destroyAllWindows();
return 0;
}
}
c_cpp_properties.json
在.vscode文件夹的c_cpp_properties.json中,includePath下添加"/usr/local/include/opencv4"
(解决检测到 #include 错误。请更新 includePath。已为此翻译单元(/home/zjgdyjy/WorkSpace/tensorrtx-master/yolov5/CutImage/opencvtest.cpp)禁用波形曲线。)
task.json
快捷键shift+ctrl+p搜索全局命令tasks,选择g++ 生成活动文件,配置内容:
// 节选
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.out",
// 解决opencv2/opencv.hpp: 没有那个文件或目录
"`pkg-config","--libs","--cflags","opencv4`" //这是添加第三方库代码,要添加什么库直接继续加就行,不要忘记了 ` 符号
//如下面再加个 gazebo11 第三方库(你得保证你安装的第三方库中含有.pc文件)
// "`pkg-config","--libs","--cflags","opencv4,gazebo11`"
],
launch.json
运行——>添加配置——>C++(GDB/LLDB)——>
{
"configurations": [
{
"name": "C/C++: cpp 生成和调试活动文件",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}.out",
"args": [
"`pkg-config","--libs","--cflags","opencv4`",
],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++ build active file", //要和 task.json的label字段一致
"miDebuggerPath": "/usr/bin/gdb",
//下面这行命令可以去除Vscode中编译后出现 [1]+ Done.... 的提示
"miDebuggerArgs": "-q -ex quit; wait() { fg >/dev/null; }; /usr/bin/gdb -q --interpreter=mi"
}
],
"version": "2.0.0"
}
如果想生成一个终端可以改:“externalConsole”: true ,弹出命令窗口
有问题或者不清楚见作者原文,那写的更清楚