博主自述:大概也是在去年的這時候,博主入坑OpenCv,當時在Windows環境下使用Visual Studio配置OpenCV可謂艱難險阻,碰到不少坑,之后由於電腦重裝系統頻繁,重新配置多次OpenCV,於是打算寫一篇博客記錄一下配置的歷程。時隔一年,又入ubuntu系統的坑,現在由於Linux系統配置編譯OpenCV較為生疏,且與Windows操作系統大為不同,每次也不必花大量時間找別人的所謂配置博客去試水,所以記錄一下心路歷程。現在大多寫博客或者出書的都是給懂的人看的,所以那么接下來會一步一步帶上一個小白在基於ubunntu操作系統下,使用VS Code正確配置編譯運行OpenCV。
大致會按如下步驟安裝:
1、安裝IDE(VS Code)
2、安裝OpenCV
3、配置編譯文件
(注):本文所有的軟件都是去官網下載源碼,關於IDE可以去商店安裝或者直接使用命令安裝都可以。
那么請看第一步:
安裝VS Code,眾所周知。VS Code只是一個IDE,屬於輕量級IDE功能強大,插件也很多,十分推薦這款IDE,本文也以VS Code為教學對象。
1、安裝IDE(VS Code)
安裝步驟如下:
1)去當前VS Code官網直接下載源碼:https://code.visualstudio.com/Download,根據電腦的位數下載.deb格式文件至本地下載文件如下圖所示。點擊即可下載。
2)下載完之后,下載文件一般在Downloads文件中,右鍵Extract Here提取文件或者使用命令行在當前目錄路徑下輸入:
tar -zxvf code-stable-xxxxxxxxx.tar.gz (你的解壓縮文件名)
3)這時當前目錄下出現文件 VSCode-linux-x64(VSCode-linux-x32),進入該文件,右鍵 -----> run。(或者使用命令行
minglou@minglou:~/Downloads$ cd VSCode-linux-x64/
minglou@minglou:~/Downloads/VSCode-linux-x64$ ./code
允許該文件,打開正常,則沒問題,那么接下來就去安裝OpenCV吧!!
2、安裝OpenCV
1)OpenCV依賴庫的安裝
2)OpenCV源碼下載
3)OpenCV編譯
安裝OpenCV需要安裝很多的依賴庫,這時候可以邊安裝依賴庫,一邊下載OpenCV源碼。
1)依賴庫安裝:
$ 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 # 處理圖像所需的包
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
$ sudo apt-get install libxvidcore-dev libx264-dev # 處理視頻所需的包
$ sudo apt-get install libatlas-base-dev gfortran # 優化opencv功能
$ sudo apt-get install ffmpeg
2)OpenCV源碼下載:
這里需要下載opencv和opencv_contrib(后者會在cmake配置的時候用到),這是因為opencv3以后SIFT和SURF之類的屬性被移到了contrib中,如果不用到以上特殊接口,只需下載opencv,以下關於opencv_contrib的操作可以忽略。
$ wget https://github.com/opencv/opencv/archive/3.2.0.zip # 從github上直接下載或者clone也可
$ wget https://github.com/opencv/opencv_contrib/archive/3.2.0.zip
3)OpenCV編譯:
下載成功后在Downloads目錄下會有兩個對於的文件壓縮包,(由於文件命名相同問題,自行分辨哪個是opencv,哪個是contrib版本)解壓之后,將opencv_contrib目錄移到opencv目錄下。
之后:
$ cd opencv-3.2.0
$ mkdir build #創建build文件夾用於編譯保存
$ cd build
如果沒有下載contrib:
$ sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
如果下載安裝contrib版本:
$ sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ..
編譯之后執行以下過程實現安裝:
$ sudo make -j4 #make -j4表示開4個線程來進行編譯
$ sudo make install
下面體驗以下正常編譯OpenCV文件並允許,以此檢查OpenCV是否可以正常編譯運行:
minglou@minglou:~/Downloads/opencv-3.2.0/samples/cpp/example_cmake$ g++ example.cpp -o 1 `pkg-config opencv --cflags --libs opencv`
minglou@minglou:~/Downloads/opencv-3.2.0/samples/cpp/example_cmake$ ./1
如果看到屏幕有一張圖片一閃而過即代表安裝成功。
最后顯示如下代表正常安裝完畢。如果中途出現安裝或者編譯出錯,百度即可。
3、配置編譯文件(VS Code + OpenCV)
打開VS Code
minglou@minglou:~/Downloads$ cd VSCode-linux-x64/
minglou@minglou:~/Downloads/VSCode-linux-x64$ ./code
打開運行VS Code
只需更改以下三個文件:
launch.json, task.json, c_cpp_properties.json
1.安裝c++, cmake tools等插件
通過左邊欄的Extension欄目安裝C++, cmake tools插件
點擊install即可。
2.創建項目工程
VScode是以文件夾的形式管理工程的,因此我們首先新建一個文件夾,我這里取名叫hello。
配置opencv需要編寫CMakeLists.txt,為了方便可以直接打開OpenCV官方給出的samples,博主路徑如下:/home/minglou/Downloads/opencv-3.2.0/samples/cpp
然后通過VScode打開此文件夾目錄下的videocapture_start.cpp文件。
3.項目配置
3.1 輸入快捷鍵ctrl+shift+D, 點擊設置圖標,彈出的選擇中選C++(GDB/LLDB),會自動創建項目的launch.json文件。然后更改launch.json中的配置,主要是修改program字段,改為可執行文件所在位置。如:
"program": "${workspaceRoot}/${fileBasenameNoExtension}.o" //則源文件為aaa.c執行文件為aaa.o
launch.json
1 { 2 // Use IntelliSense to learn about possible attributes. 3 // Hover to view descriptions of existing attributes. 4 // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 "version": "0.2.0", 6 "configurations": [ 7 { 8 "name": "g++ build and debug active file", 9 "type": "cppdbg", 10 "request": "launch", 11 "program": "${fileDirname}/${fileBasenameNoExtension}.o", 12 "args": [], 13 "stopAtEntry": false, 14 "cwd": "${workspaceFolder}", 15 "environment": [], 16 "externalConsole": false, 17 "MIMode": "gdb", 18 "setupCommands": [ 19 { 20 "description": "Enable pretty-printing for gdb", 21 "text": "-enable-pretty-printing", 22 "ignoreFailures": true 23 } 24 ], 25 "preLaunchTask": "g++ build active file", 26 "miDebuggerPath": "/usr/bin/gdb" 27 } 28 ] 29 }
主要關注三個參數:
"program"
這一參數指明debug時運行哪個程序,"program": "${workspaceFolder}/${fileBasenameNoExtension}.o",表明是要運行當前目錄中與被編譯文件同名的.o后綴文件
"MIMode"
這一參數指明要使用的debug工具,Ubuntu環境下當然是gdb。win10環境下是MinGW,MacOS環境下是lldb。
"miDebuggerPath"
這一句也很重要。在默認生成的launch.json文件中並沒有這一參數的設置語句,但這一句卻是最重要的,因為有了這一句,vscode在編譯運行cpp文件時才能找到gdb程序。
一般情況下,gdb是被安裝在/usr/bin/gdb目錄下,所以這一句為:"miDebuggerPath": "/usr/bin/gdb",
此時可以運行main.cpp文件
3.2 快捷鍵ctrl+shift+P調出命令面板,並輸入C/C++:Edit Configuration(JSON),編輯文件"includePath"選項,加入OpenCV的頭文件,通常是"/usr/local/include",如下圖所示(別忘記前面家逗號(,),后面不加逗號(,))
在自己的cpp文件里直接包含opencv庫,聰明的cpp擴展會給你一個小提示提醒你打開c_cpp_properties.json設置頭文件包含。不說廢話:
c_cpp_properties.json
{ "configurations": [ { "name": "Linux", "includePath": [ "${workspaceFolder}/**", "/usr/local/include" ], "defines": [], "compilerPath": "/usr/bin/gcc", "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "clang-x64" } ], "version": 4 }
3.3 快捷鍵ctrl+shift+P調出命令面板,並輸入Tasks:Configure Task,默認選擇第一項,開始編輯task.json文件,重點在這
1 "args": [ 2 "-g", 3 "-std=c++11", 4 "${file}", 5 "-o", 6 ],
明眼人一看就知道這就是g++編譯命令,不必多說。要注意最后一個參數"${fileBasenameNoExtension}.o",,必須跟launch.json中program參數("${workspaceFolder}/${fileBasenameNoExtension}.o")的文件名相對應。
還有一點就是,如果要設置label參數的話,要將之設置為preLaunchTask的值。不記得preLaunchTask的童鞋回頭看看launch.json。
這部分通用的C++編譯運行設置就OK了,現在你可以愉快地用vscode寫hello world了,但是我們的征程是星辰大海和opnencv,所以,還得繼續折騰。
解決OpenCV庫文件搜索,直接修改編譯命令,也就是tasks.json中的args參數:
tasks.json
1 { 2 "tasks": [ 3 4 { 5 "type": "shell", 6 "label": "g++ build active file", 7 "command": "g++", 8 "args": [ 9 "-g", 10 "-std=c++11", 11 "${file}", 12 "-o", 13 "${fileDirname}/${fileBasenameNoExtension}.o", 14 "-I", "/usr/local/include", 15 "-I", "/usr/local/include/opencv", 16 "-I", "/usr/local/include/opencv2", 17 "-L", "/usr/local/lib", 18 "-l", "opencv_core", 19 "-l", "opencv_imgproc", 20 "-l", "opencv_imgcodecs", 21 "-l", "opencv_video", 22 "-l", "opencv_ml", 23 "-l", "opencv_highgui", 24 "-l", "opencv_objdetect", 25 "-l", "opencv_flann", 26 "-l", "opencv_imgcodecs", 27 "-l", "opencv_photo", 28 "-l", "opencv_videoio" 29 ], 30 "options": { 31 "cwd": "/usr/bin" 32 }, 33 "group": { 34 "kind": "build", 35 "isDefault": true 36 } 37 } 38 ], 39 "version": "2.0.0" 40 }
其中-I表示頭文件目錄,-L表示庫文件目錄,-l表示庫文件。
那么,以上OpenCV已經配置好了ctrl+shift+B編譯cpp文件,F5運行。直接上手代碼來一段吧。
推薦博客:https://www.cnblogs.com/YiYA-blog/p/10082635.html
https://blog.csdn.net/weixin_43374723/article/details/84064644