使用VS2017 編寫Linux系統上的Opencv程序


背景

之前寫圖像算法的程序都是在window10下使用VS編寫,VS這個IDE結合“ImageWatch.vsix“插件,用於調試opencv相關的圖像算法程序十分方便。后因項目需要,需將相關程序移植到Linux系統,才開始研究如何使用VS編寫Linux上的Opencv程序。


一、Ubuntu安裝相關庫

0/先把ubuntu鏡像源換成清華的

這樣安裝下載的速度會快些。

1/下載opencv cmake安裝包

新建opencv文件夾,去opencv官網下載源文件,https://opencv.org/opencv-3-4.html,放入路徑中; 
新建cmaker文件夾,去Cmaker官網下載安裝包,https://cmake.org/download/,放入路徑中。

2/安裝Cmake

因為可能需要聯合編譯,最好用最新版本,要圖簡單就直接sudo apt-get install cmake 。控制台輸入:

./bootstrap
make -j3 sudo make install
  • 1
  • 2
  • 3

3/安裝依賴庫

解壓opencv安裝包,並新建build文件夾,然后在build文件夾路徑下安裝依賴項,控制台輸入:

sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff5-dev libjasper-dev libopenexr-dev cmake python-dev python-numpy python-tk libtbb-dev libeigen2-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev
  • 1

4/安裝opencv

配置cmake(簡單的話可以cmake-gui ..然后依次點Configure和Generate按鈕生成Configure文件),控制台輸入:

sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_EIGEN=OFF -D WITH_TBB=ON -D WITH_V4L=ON -D CMAKE_INSTALL_PREFIX=/usr/local/opencv/340 ..
  • 1

編譯

sudo make -j3
  • 1

安裝

sudo make install -j3
  • 1

5/配置lib庫路徑

在 /etc/ld.so.conf.d/ 路徑下新建了 opencv.conf 文件(如已有該文件就不用新建了),

sudo gedit /etc/ld.so.conf.d/opencv.conf
  • 1

打開該文件加入下面的內容: 
/usr/local/opencv/340/lib 
然后

sudo ldconfig /etc/ld.so.conf
  • 1

6/環境變量

對所有用戶有效修改/etc/profile文件 
對個人有效則修改~/.bashrc文件

sudo gedit /etc/bash.bashrc
  • 1

在文件末尾加上 
export PKG_CONFIG_PATH=/usr/local/opencv/340/lib/pkgconfig 
export LD_LIBRARY_PATH=/usr/local/opencv/340/lib 
保存之后,再使用命令

source /etc/bash.bashrc
  • 1

7/更新

sudo updatedb 
  • 1

8/檢查opencv安裝情況

pkg-config –modversion opencv 
pkg-config –cflags opencv 
pkg-config –libs opencv

9/小程序測試

使用opencv測試代碼

cd到opencv-3.4.0/smaples/cpp/example_cmake目錄下

cmake .
make ./opencv_example
  • 1
  • 2
  • 3

即可看到打開了攝像頭,在左上角有一個hello opencv 即表示配置成功.

自己編寫代碼測試

自己建立文件夾,寫個簡單的test1.cpp,然后控制台輸入:

g++ test1.cpp -o test1 `pkg-config opencv --cflags --libs` -std=c++11 ./test1
  • 1
  • 2

10/安裝錯了,就得卸載了重新安裝

進入到build文件夾,控制台輸入:

make uninstall
cd ..
sudo rm -r release
sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv
  • 1
  • 2
  • 3
  • 4

二、VS新建Linux項目

Visual Studio 從2015開始,就開始支持Linux編程,VS2017更不用說(只要安裝的時候注意安裝跨平台Linux的模塊即可)。相關的說明可上官網查看:https://blogs.msdn.microsoft.com/vcblog/2016/03/30/visual-c-for-linux-development/ 
打開VS,文件》新建》項目,選擇Visual C++》跨平台》Linux》控制台應用程序。 
新建Linux項目
VS會自動幫你寫好一個main.cpp,此時直接按F5就能運行調試,然后需要你輸入Linux系統的IP地址(可在Shell輸入 ifconfig -a查詢),Boot用戶名,密碼。 
摘取自MSDN
點擊確定后,就能直接運行了。 
這個時候在Linux系統的/home/下會新建projects文件夾,其中就有VS的新建項目文件夾。


三、VS項目鏈接Linux的頭文件和外接opencv庫

參考:http://www.cnblogs.com/dongc/p/6599461.htmlhttps://www.cnblogs.com/reskai/p/7135586.html 
主要都是項目屬性中設置相關參數。

1/鏈接頭文件

由於是在雙系統下編程,頭文件的作用如下:

  • 在Windows系統下需要頭文件來進行代碼提示
  • 在Linux系統下需要程序鏈接頭文件

1-1 頭文件用於代碼提示

首先將Linux下相關的頭文件復制到VS的Linux項目路徑下,既可以直接鼠標點擊復制,也可直接cmd下運行(前提system32下有pscp.exe)

pscp -r 用戶名@UbuntuIP地址:/usr/include .
  • 1

然后將/usr/local/opencv/340/include(與你之前安裝opencv的設置有關)下的文件也拷貝到VS的工程目錄下。 
然后在項目屬性中設置VC++目錄》包含目錄 
包含目錄主要用於代碼提示

1-2 頭文件用於程序運行

程序是在Linux上運行的,也需要頭文件,這里的頭文件路徑應是Linux系統上的絕對路徑。在項目屬性中設置 C/C++ 》附加包含目錄,這里主要填入opencv安裝后的頭文件目錄,我這里是 
/usr/local/opencv/340/include 
/usr/local/opencv/340/include/opencv 
/usr/local/opencv/340/include/opencv2 
具體的路徑根據你安裝opencv確定。 
C++編譯器選為g++ 
附加包含目錄才用於Linux程序運行

2/鏈接外部opencv庫

2-1 設置“附加”庫目錄

鏈接外部opencv庫,之前我一直在VC++目錄下設置 庫目錄,后來發現根本沒用! 
后來發現,凡是需要遠程在Linux系統上運行的,都必須設置在 “附加“里面。故,**Linux的庫目錄也必須設置在“附加庫目錄”里面,里面填寫的是opencv相關庫在Linux下的絕對路徑。 
跟Linux相關都葯設置“附加*”
這里我填寫 
/usr/local/opencv/340/lib

2-2 設置庫依賴項

這里跟windows下設置類似,在連接器》輸入》庫依賴項中,填寫可能用到的opencv庫名稱(注意這里的名稱是去掉“lib”前綴和”.a”/”.so”尾綴的庫名稱)。 
這里寫圖片描述
我這里填入:

opencv_calib3d
opencv_core
opencv_dnn
opencv_features2d
opencv_flann
opencv_highgui
opencv_imgcodecs
opencv_imgproc
opencv_ml
opencv_objdetect
opencv_photo
opencv_shape
opencv_stitching
opencv_superres
opencv_video
opencv_videoio
opencv_videostab
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

3/小程序測試

隨便在main.cpp中寫個小程序測試一下:

#include <cstdio> #include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { printf("hello from UbuntuTestified!\n"); Mat srcImage = imread("11.jpg"); imshow("testImg2", srcImage); waitKey(5000); return 0; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

按F5生成一下……怎么沒反應?別急,VS是在Windows系統,生成的程序是在Linux系統,自然不能在windows下顯示效果(但文字顯示可以)。 
直接到Linux系統下,該程序的生成路徑下(…\bin\release或debug)打開,記得把命名為”11.jpg”的圖片也放入該路徑下。 
這樣程序就能正常運行了。 
Linux下運行opencv程序效果

版權聲明:本文為博主原創文章,未經博主允許不得轉載。 http://blog.csdn.net/u010677365/article/details/79310617


免責聲明!

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



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