博主之前都是使用Visual Studio 2017進(jìn)行c++開(kāi)發(fā),目前小組開(kāi)發(fā)統(tǒng)一使用vscode 進(jìn)行開(kāi)發(fā)和維護(hù),因此去踩坑搭建本地的一個(gè)vscode開(kāi)發(fā)環(huán)境。以下為搭建環(huán)境的整個(gè)過(guò)程記錄。
1、軟件和庫(kù)選擇
- vscode 下載地址:vscode下載
- Cmake-3.26.0-rc3 下載地址:CMake
- MinGW-W64 GCC-7.3.0,下載地址如下:Mingw64
- opencv4.5.3 source庫(kù) :下載地址如下所示:opencv源碼下載地址,如果下載速度慢或者不成功可以從如下地址進(jìn)行下載:opencv source lab
- Eigen-3.4.0庫(kù),下載地址:Eigen庫(kù)下載
2、軟件安裝
2.1 vscode安裝
直接點(diǎn)擊下載好的vscode安裝包安裝即可:
2.2 cmake安裝
2.2.1 下載cmake對(duì)應(yīng)的zip包
2.2.2 解壓到相應(yīng)路徑
建議放到c盤(pán)的Program Files
2.2.3 配置環(huán)境變量
打開(kāi)我的電腦->屬性->高級(jí)系統(tǒng)設(shè)置->環(huán)境變量,增加如下紅框所示變量
2.2.4配置成功的標(biāo)志
在cmd中輸入cmake --version 出現(xiàn)如下情況表示配置成功
2.3 MinGW安裝
2.3.1 下載x86_64-posix-silj并進(jìn)行解壓
首先選擇下載地址下圖所示repo進(jìn)行下載
接著將壓縮包解壓到你自己的盤(pán):
2.3.2 配置環(huán)境變量
打開(kāi)我的電腦->屬性->高級(jí)系統(tǒng)設(shè)置->環(huán)境變量,增加如下紅框所示變量
2.3.3 配置成功的標(biāo)志
在cmd中輸入gcc -v 出現(xiàn)如下情況表示配置成功
2.4 opencv安裝編譯
vscode使用opencv需要先使用cmake進(jìn)行opencv源碼的編譯
2.4.1 下載opencv并進(jìn)行解壓
2.4.2 cmake編譯
2.4.2.1 打開(kāi)cmake-gui.exe
找到存放cmake的位置,對(duì)應(yīng)找到其中的gui位置
2.4.2.2 配置cmake基本參數(shù)
在where is the source code處配置需要編譯的opencv源碼位置,在where to build the binaries處配置存放編譯后的源碼位置,此處我建了一個(gè)opencv-4.5.3_x64_build文件夾進(jìn)行存放。
2.4.2.3 點(diǎn)擊configure,選擇MinGW Makefiles、Specify native compilers
2.4.2.4 點(diǎn)擊Next,編譯器選擇,C選擇MinGW-w64的bin目錄下gcc.exe,C++則選擇g++.exe
2.4.2.5 點(diǎn)擊Finish后,程序自動(dòng)進(jìn)行配置
-------------------------------一些troubleshoot方法-----------------------------
這一步配置可能因?yàn)榫W(wǎng)速問(wèn)題導(dǎo)致有些庫(kù)下載失敗,可以在你生成目錄打開(kāi)CMakeDownloadLog.txt查看具體失敗的庫(kù),如下所示:
CMakeDownloadLog.txt下載失敗樣例如下
#use_cache "D:/chorm-download/opencv-4.5.3/.cache"
#do_copy "opencv_videoio_ffmpeg.dll" "bab661341c30862fa88627130219c0a5" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/213fcd5d4897319a83207406036c4a5957fba010/ffmpeg/opencv_videoio_ffmpeg.dll" "D:/chorm-download/opencv-4.5.3_x64_build/3rdparty/ffmpeg"
#missing "D:/chorm-download/opencv-4.5.3_x64_build/3rdparty/ffmpeg/opencv_videoio_ffmpeg.dll"
# timeout on name lookup is not supported
# Trying 151.101.108.133...
# TCP_NODELAY set
# connect to 151.101.108.133 port 443 failed: Connection refused
# Failed to connect to raw.githubusercontent.com port 443: Connection refused
# Closing connection 0
解決方案:
復(fù)制上述txt中對(duì)應(yīng)的dll下載路徑,利用迅雷進(jìn)行下載,并拷貝到opencv的源碼的.cache/ffmpeg文件夾下(我的路徑為:D:\chorm-download\opencv-4.5.3.cache\ffmpeg),并使用cmd中的命令求取獨(dú)贏文件的MD5值,使用MD5+文件名稱(chēng)重新命名原文件名稱(chēng)
eg:
原文件名:opencv_videoio_ffmpeg_64.dll
更新后的文件名:
ac99f9767a83103c31709628af685924-opencv_videoio_ffmpeg_64.dll
其中ffmpeg_version.cmake的下載可以考慮先保存網(wǎng)頁(yè)后進(jìn)行名稱(chēng)后綴的更改
2.4.2.6 點(diǎn)擊generate
2.4.2.6 完成后,進(jìn)入之前自己創(chuàng)建的編譯結(jié)果存放的文件夾,按住shift再按鼠標(biāo)右鍵,選擇在此進(jìn)入powershell窗口。輸入MinGW32-make -j4 開(kāi)始編譯,大致要20分鐘。
2.4.2.7 編譯完成后,再輸入MinGW32-make install進(jìn)行安裝
2.4.2.8 環(huán)境配置
打開(kāi)我的電腦->屬性->高級(jí)系統(tǒng)設(shè)置->環(huán)境變量,增加如下紅框所示變量
2.4 Eigen下載解壓
- 從第一節(jié)所示位置下載如下的Eigen3.4.0版本的tar包
- 解壓到某個(gè)文件下備用
3、vscode配置并使用
3.1 打開(kāi)vscode軟件,在你設(shè)定的代碼目錄下面建立一個(gè).vscode文件夾
3.2 在.vscode文件夾下面分別建立三個(gè)json文件,分別為:c_cpp_properties.json,launch.json,tasks.json。
如下為具體的配置:
c_cpp_properties.json配置如下:
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"D:/personal/vs_project/eigen-3.4.0/**",
"D:/chorm-download/opencv-4.5.3_x64_build/install/include",
"D:/chorm-download/opencv-4.5.3_x64_build/install/include/opencv2",
"D:/chorm-download/opencv-4.5.3_x64_build/install/x64/mingw/lib",
"D:/personal/vs_project/eigen-3.4.0"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "10.0.17763.0",
"compilerPath": "D:\\chorm-download\\mingw64\\bin\\gcc.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
launch.json配置如下:
// https://code.visualstudio.com/docs/cpp/launch-json-reference
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch", // 配置名稱(chēng),將會(huì)在啟動(dòng)配置的下拉菜單中顯示
"type": "cppdbg", // 配置類(lèi)型,cppdbg對(duì)應(yīng)cpptools提供的調(diào)試功能;可以認(rèn)為此處只能是cppdbg
"request": "launch", // 請(qǐng)求配置類(lèi)型,可以為launch(啟動(dòng))或attach(附加)
"program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 將要進(jìn)行調(diào)試的程序的路徑
"args": [], // 程序調(diào)試時(shí)傳遞給程序的命令行參數(shù),一般設(shè)為空即可
"stopAtEntry": false, // 設(shè)為true時(shí)程序?qū)和T诔绦蛉肟谔?,相?dāng)于在main上打斷點(diǎn)
"cwd": "${workspaceFolder}", // 調(diào)試程序時(shí)的工作目錄,此為工作區(qū)文件夾;改成${fileDirname}可變?yōu)槲募谀夸? "environment": [], // 環(huán)境變量
"externalConsole": true, // 使用單獨(dú)的cmd窗口,與其它IDE一致;為false時(shí)使用內(nèi)置終端
"internalConsoleOptions": "neverOpen", // 如果不設(shè)為neverOpen,調(diào)試時(shí)會(huì)跳到“調(diào)試控制臺(tái)”選項(xiàng)卡,你應(yīng)該不需要對(duì)gdb手動(dòng)輸命令吧?
"MIMode": "gdb", // 指定連接的調(diào)試器,可以為gdb或lldb。
"miDebuggerPath": "D:\\chorm-download\\mingw64\\bin\\gdb.exe", // 調(diào)試器路徑,Windows下后綴不能省略,Linux下則不要
"setupCommands": [
{ // 模板自帶,好像可以更好地顯示STL容器的內(nèi)容,具體作用自行Google
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
],
"preLaunchTask": "Compile" // 調(diào)試會(huì)話開(kāi)始前執(zhí)行的任務(wù),一般為編譯程序。與tasks.json的label相對(duì)應(yīng)
}]
}
tasks.json配置如下
// {
// "version": "2.0.0",
// "tasks": [
// {
// "type": "shell",
// "label": "g++.exe build active file",
// "command": "D:\\chorm-download\\mingw64\\bin\\g++.exe",
// "args": ["-g",
// "${file}",
// "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe",
// "-I", "D:/chorm-download/opencv-4.5.3_x64_build/install/include",
// "-I", "D:/chorm-download/opencv-4.5.3_x64_build/install/include/opencv2",
// "-L", "D:/chorm-download/opencv-4.5.3_x64_build/install/x64/mingw/lib",
// "-l","opencv_core453",
// "-l","opencv_imgproc453",
// "-l","opencv_imgcodecs453",
// "-l","opencv_video453",
// "-l","opencv_ml453",
// "-l","opencv_highgui453",
// "-l","opencv_objdetect453",
// "-l","opencv_flann453",
// "-l","opencv_imgcodecs453",
// "-l","opencv_photo453",
// "-l","opencv_videoio453"],
// "options": {
// "cwd": "D:\\chorm-download\\mingw64\\bin"
// },
// "problemMatcher": [
// "$gcc"
// ],
// "group": {
// "kind": "build",
// "isDefault": true
// }
// }
// ]
// }
// https://code.visualstudio.com/docs/editor/tasks
{
"version": "2.0.0",
"tasks": [
{
"label": "Compile", // 任務(wù)名稱(chēng),與launch.json的preLaunchTask相對(duì)應(yīng)
"command": "D:\\chorm-download\\mingw64\\bin\\g++.exe", // 要使用的編譯器,C++用g++
"args": [
"${file}",//當(dāng)前文件名
"-o", // 指定輸出文件名,不加該參數(shù)則默認(rèn)輸出a.exe,Linux下默認(rèn)a.out
"${fileDirname}/${fileBasenameNoExtension}.exe",
"-g", // 生成和調(diào)試有關(guān)的信息
"-m64", // 不知為何有時(shí)會(huì)生成16位應(yīng)用而無(wú)法運(yùn)行,加上此條可強(qiáng)制生成64位的
"-Wall", // 開(kāi)啟額外警告
"-static-libgcc", // 靜態(tài)鏈接libgcc,一般都會(huì)加上
"-finput-charset=UTF-8",
"-fexec-charset=GBK", // 生成的程序使用GBK編碼,不加這條會(huì)導(dǎo)致Win下輸出中文亂碼;繁體系統(tǒng)改成BIG5
"-std=c++17", // 要用的語(yǔ)言標(biāo)準(zhǔn),根據(jù)自己的需要修改。c++可用c++14
// 擴(kuò)展參數(shù)
// -I 頭文件目錄
// -L 庫(kù)文件目錄
// -l 庫(kù)文件
"-I", "D:/chorm-download/opencv-4.5.3_x64_build/install/include",
"-I", "D:/chorm-download/opencv-4.5.3_x64_build/install/include/opencv2",
"-I","D:/personal/vs_project/eigen-3.4.0",
"-L", "D:/chorm-download/opencv-4.5.3_x64_build/install/x64/mingw/lib",
"-l", "libopencv_calib3d453",
"-l", "libopencv_core453",
"-l", "libopencv_dnn453",
"-l", "libopencv_features2d453",
"-l", "libopencv_flann453",
"-l", "libopencv_gapi453",
"-l", "libopencv_highgui453",
"-l", "libopencv_imgcodecs453",
"-l", "libopencv_imgproc453",
"-l", "libopencv_ml453",
"-l", "libopencv_objdetect453",
"-l", "libopencv_photo453",
"-l", "libopencv_stitching453",
"-l", "libopencv_video453",
"-l", "libopencv_videoio453"
], // 編譯的命令,其實(shí)相當(dāng)于VSC幫你在終端中輸了這些東西
"type": "process", // process是把預(yù)定義變量和轉(zhuǎn)義解析后直接全部傳給command;shell相當(dāng)于先打開(kāi)shell再輸入命令,所以args還會(huì)經(jīng)過(guò)shell再解析一遍
"group": {
"kind": "build",
"isDefault": true // 不為true時(shí)ctrl shift B就要手動(dòng)選擇了
},
"presentation": {
"echo": true,
"reveal": "always", // 執(zhí)行任務(wù)時(shí)是否跳轉(zhuǎn)到終端面板,可以為always,silent,never。具體參見(jiàn)VSC的文檔
"focus": false, // 設(shè)為true后可以使執(zhí)行task時(shí)焦點(diǎn)聚集在終端,但對(duì)編譯C/C++來(lái)說(shuō),設(shè)為true沒(méi)有意義
"panel": "shared" // 不同的文件的編譯信息共享一個(gè)終端面板
},
"problemMatcher":"$gcc" // 捕捉編譯時(shí)終端里的報(bào)錯(cuò)信息到問(wèn)題面板中,修改代碼后需要重新編譯才會(huì)再次觸發(fā)
// 本來(lái)有Lint,再開(kāi)problemMatcher就有雙重報(bào)錯(cuò),但MinGW的Lint效果實(shí)在太差了;用Clang可以注釋掉
}]
}
3.3 具體應(yīng)用實(shí)例
此處使用一個(gè)簡(jiǎn)單的應(yīng)用實(shí)例,進(jìn)行opencv以及eigen庫(kù)的使用情況:
在opencv-demo下面建立一個(gè)src文件夾,并新建一個(gè)opencv_demo.cpp文件夾,并加入如下c++運(yùn)行代碼.
代碼如下:
#include<opencv2/opencv.hpp>
#include<opencv2/highgui.hpp>
#include<Eigen/Dense>
using namespace cv;
using Eigen::MatrixXd;
using Eigen::VectorXd;
int main(){
Mat img = cv::imread("D:/personal/model_and_code/img/adc.png");
cv::namedWindow("demo",cv::WINDOW_NORMAL);
cv::imshow("demo", img);
MatrixXd m = MatrixXd::Random(3, 3);
m = (m + MatrixXd::Constant(3, 3, 1.2)) * 50;
std::cout << "m =" << std::endl << m << std::endl;
VectorXd v(3);
v << 1, 2, 3;
std::cout << "m * v =" << std::endl << m * v << std::endl;
cv::waitKey(0);
system("pause");
return 0;
}
F5啟動(dòng)程序后,可以看到如下示例結(jié)果:
到這一步,大功告成,opencv和eigen庫(kù)可以在vscode中開(kāi)心的使用了。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-441179.html
參考鏈接:
CMake編譯OpenCV4.0時(shí)opencv_ffmpeg.dll等下載失敗的解決思路總結(jié)
VSCode搭建OpenCV的c++環(huán)境(windows10)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-441179.html
到了這里,關(guān)于vscode安裝配置opencv+eigen庫(kù)并使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!