ubuntu16.04+VS Code+OpenCV配置編譯運行程序


    博主自述:大概也是在去年的這時候,博主入坑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




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM