2016年8月12日 星期五

暑假作業1:openCV影像處理

開始用這個部落格是發現很多人都會用網誌的方式記錄一些程式練習過程,一來可以在忘記的時候回來查閱,二來也可以針對自己練習過的東西做一些修正和改進。

所以我的第一個筆記就從這個小小的暑假作業開始



首先是在visual studio上使用openCV函式庫
visual studio版本基本上沒有甚麼差別,重點是openCV的版本
目前(2016/8/12)openCV發布了兩個版本2.X.X以及3.X.X,基本上前者是舊版,後者是新版,但是似乎是因為過去舊版本的使用者也很多的緣故,所以在發行新版本的同時,舊版本還是同樣的有在更新,不過新版本的lib連結更簡單而且執行速度上也更快(官方自己說的),所以如果沒有甚麼需要舊版本的內容或是為了修改過去舊程式的需求,基本上還是推薦用3.X.X的版本,而openCV基本上各個環境都有對應的版本,而我這次使用的環境是windows系統下的visual studio的C++,所以下載windows版本的openCV即可,這次我使用的版本是openCV 3.1解壓縮後可以發現C:\opencv\build\x64(openCV下載完解壓縮到C槽)資料夾下有vc12和vc14這代表一個是給visual studio 2013平台一個是visual studio 2015平台使用的,在連結lib時要特別注意,基本上也只要注意這個就可以了,剩下的安裝方式微軟跟openCV官方網站都有,只是版本不一定會是最新版本所以我們自己要記得代換一下,剩下的就是依樣畫葫蘆囉。

目前使用的版本是visual studio2015,不要忘了要記得安裝C++,預設下載的vusual studio是只含C#的,所以要記得把C++在下載時也勾選進來。

所以目前的整個環境
作業系統:windows 10
開發平台:visual studio 2015
使用函式庫:openCV 3.1(所在位置C:\)
順帶一提基本上如果要加入其他不同的函式庫像是openGL基本上方法也是一樣的

1.加入環境變數
環境變數這個東西可能剛開始接觸的人都會對這個東西感到困擾,程式出現BUG-環境變數沒設定,程式跳eorror-環境變數路徑錯誤,然後編譯器跳一大堆message,基本上環境變數可以看成:當我們要執行程式的時候,我們當然會到檔案所在的資料夾底下執行,如果會使用commad line之類的執行方式,我們都知道其實只要執行程式之前給他一個絕對路徑就可以執行了,我們不用特別跑到那個資料夾底下去執行他,而這個絕對路徑就是我們windows底下所要加入的環境變數,所以如果沒有加入環境變數,以openCV為例,程式會告訴你:雖然我知道你要我去使用mat.h這個標頭檔但是我不知道他在哪裡,所以另一種情況我們自己寫的lib當然放在同一個資料夾的情況下自然就不用去設定甚麼環境路徑,程式會自己去找資料夾裡面的lib去做連結,所以才會產生有些lib要設定環境變數有些不用,其實就是這麼簡單的道理而已。

所以我們現在設定環境變數,而openCV的執行檔當然要對應我們平台的版本
所以選擇build資料及底下x64(win7以後的作業系統)裡面的vc14(visual studio2015)的執行檔
本機 → 內容 → 進階系統設定 → 環境變數 → path → 編輯
加入:C:\opencv\build\x64\vc14\bin

2.開啟visual studio2015
新增visual C++的win32主控台程式,選擇空專案即可

3.設定連接器
雖然透過環境變數的設定我們的作業系統已經知道要去哪裡執行檔案了,但是我們的編譯器還不知道那些lib的位置,所以我們還要設定連接器,簡單的來說:一般在command line執行程式的時候我們會打類似這樣的語法:gcc -o main.cpp
這就是一個最簡單的編譯一個C++程式的語法(執行黨會預設為a.out)
但是如果有include其他的header我們必須在編譯main.cpp之前先把這些lib的cpp檔案先編譯成.o檔然後編譯時候後面加上去他們的名字,像是:gcc -o main.cpp A.o B.o C.o
這個動作就是連結器在作的,linker需要我們給他們lib的位置和內容才能幫我的找到程式所使用到的lib。

visual studio設定連結器的方法非常簡單
1.對著專案點下右鍵→最下方有屬性

2.
設定VC++目錄 →在「Include目錄」增加“C:\opencv\build\include”
設定VC++目錄 →在「程式庫目錄」增加“C:\opencv\build\x64\vc14\lib”
Include目錄就是那些.h檔案,我們會在main.cpp裡面include的那些標頭檔
但其實真正的內容是,cpp檔案裏面的定義,那些檔案openCV已經幫我們編譯好成.o檔了,所以我們只要在程式庫目錄加上路徑
3.設定連結器 → 輸入 →其他相依性
加入下面兩個檔案
opencv_world310.lib
opencv_world310d.lib
你可以看一下這兩個檔案就是程式庫目錄C:\opencv\build\x64\vc14\lib底下的唯二obj檔也就是我們的,o檔
到這裡設定都完成了,我們可以開始加入cpp檔案然後試著執行它了

這裡是最簡單的openCV開啟圖檔的程式

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace std;
using namespace cv;

int main(int argc, char** argv)

{
argv[1] = "C:\\lena.jpg";
Mat image;

image = imread(argv[1], CV_LOAD_IMAGE_COLOR);

if (!image.data)
{
return -1;

}

namedWindow("Display", CV_WINDOW_NORMAL);
imshow("Display", image);
waitKey(0);

return 0;
}

參考資料:openCV、microsoft官方網站

沒有留言:

張貼留言