一.源码编译Opencv
可参考博主之前的博客
树莓派4B上配置Opencv_竹叶青lvye的博客-优快云博客
博主这篇博客使用的版本是opencv3.4.4,其所在的位置如下:
博主这里会在opencv-3.4..4文件夹里新建build和install文件夹,cd到build文件夹里,会执行如下的命令(当然你可以指定更多参数)。
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/home/pi/opencv-3.4.4/install ..
最后安装的文件都在install文件夹下了,如下:
附加(和主题没有关系,只是为了方便博主日后查看,不需要的童鞋可以跳过):
如下之前写的博客可以借鉴其中的编译命令方式,虽然平台不一样,方法方式是一样的
Ubuntu下Qt Creator配置opencv_竹叶青lvye的博客-优快云博客_ubuntu下qt配置opencv
如果你想在PC平台上编译好这些install文件夹里的文件,你可以通过交叉编译方式来进行,然后将编译好的的文件拷贝到树莓派上即可,可参考博主之前的博客
Ubuntu交叉编译含有Opencv功能的程序并在树莓派上执行_竹叶青lvye的博客-优快云博客_ubuntu交叉编译opencv
二.安装vscode
树莓派安装vscode方法可见之前博客
完毕后,点击如下界面左侧的符号(红框标记)
看看installed的栏里有没有安装一些必要插件,比如C/C++, C/C++ Compile Run,C/C++ Extension Pack, C++ Intellisense,没有的话就手动安装上。
博主这边新建了一个test.cpp文件
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
using namespace cv;
using namespace std;
int main()
{
cout << "hello world" << endl;
Mat img = imread("/home/pi/test_openvino/test5/2008_002682.jpg");
imwrite("image.bmp", img);
//imshow("image",img);
//waitKey(0);
cout << "over" << endl;
return 0;
}
此时工程目录结构如下:
三.配置文件
配置task.json
完毕后,点击Terminal菜单栏下的Configure Default Build Task选项
弹跳出来的窗口内选择红框的选项
便自动生成了task.json文件,在里面配置下opencv的信息,贴下博主的配置(结合自己的路径)
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ build active file",
"command": "/usr/bin/g++",
"args": [
"-std=c++11",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}",
"-I",
"/home/pi/opencv-3.4.4/install/include",
"-I",
"/home/pi/opencv-3.4.4/install/include/opencv2",
"-I",
"/home/pi/opencv-3.4.4/install/include/opencv",
"-L",
"/home/pi/opencv-3.4.4/install/bin",
"-L",
"/home/pi/opencv-3.4.4/install/lib",
"-lopencv_highgui",
"-lopencv_core",
"-lopencv_imgproc",
"-lopencv_imgcodecs"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "compiler: /usr/bin/g++"
}
]
}
配置launch.json
再点击下菜单栏Run中的Add Configuration选项
注意此时应该是在主页面显示test.cpp内容情况下去操作上面一步,换句话说,不能在主页面显示tasks.json文件中内容的情况下去操作上面。
弹跳出来的窗口中,选择第一条选项
便自动生成了launch.json文件
此时点击下图中显示的Add Configuration按钮,跳出来的窗口中选择红框标记的选项
launch.json文件中会出现很多信息。在此基础上你可以继续修还此配置文件,这边贴上博主的配置
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++ build active file",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
注意这里的“program"选项值得要和tasks.json中的”-O"选项值一致。
配置c_cpp_properties.json
ctrl+shift+P跳出来的窗口中,可以选择到选项来编辑c_cpp_properties.json, 可在此基础上进行修改,贴上博主的
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/home/pi/opencv-3.4.4/install/include",
"/home/pi/opencv-3.4.4/install/include/opencv",
"/home/pi/opencv-3.4.4/install/include/opencv2"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu17",
"cppStandard": "gnu++14",
"intelliSenseMode": "linux-gcc-arm"
}
],
"version": 4
}
三个json文件配置完毕后,此时工程的目录结构如下:
此时opencv的环境也就配置好了(include,lib库路径也都配置好了)。
同时别忘了在环境变量里把opencv的lib路径加上,让系统能够找到
完毕后,执行下
source ~/.bashrc
四.运行程序
将主页面切换到test.cpp,此时点击左侧的三角(红色标识1)
然后点击红色标识2处的小箭头,便可以debug程序来。程序成功运行,信息如下:
补充:
1.若要命令行语句运行此test.cpp文件,可执行如下命令行语句:
/usr/bin/g++ -std=c++11 -g /home/pi/test_openvino/test5/test.cpp -o /home/pi/test_openvino/test5/test_opencv -I /home/pi/opencv-3.4.4/install/include -L /home/pi/opencv-3.4.4/install/lib -lopencv_highgui -lopencv_core -lopencv_imgproc -lopencv_imgcodecs
然后执行
./test_opencv
2.还有一种就是用pkg_config方式,博客里也说明了此方式,这边就不再赘叙了。