(2016年9月16日更新)
這個部落格其實很早就在想要更新上來,想寫的原因有很多:比如,這基本算得上是OpenCV的入門課程,在visual studio上要想使用OpenCV就得要配置這一切;另外一點就是每次一換電腦活着重裝系統,就把要重新安裝VS,都需要配置,都需要上網去搜,還不如自己寫一篇,查詢起來也友善;另外一點,也算是消化一下網上大家的或詳細或簡單的流程,轉化為自己的内容!
準備工作
- 首先你需要安裝好visual studio。其實VS10,VS12在這篇文章中都可以通用,以後的每一條我都會說明VS10應該填寫什麼,VS12應該填寫什麼;
- 上http://opencv.org/去下載下傳曆史版本裡的檔案,我這裡選擇的是OpenCV 2.4.11。下載下傳下來的是一個可執行檔案exe,其實是一個可執行的自解壓程式。之後輕按兩下之後會出現自解壓的界面選擇解壓之後檔案夾存放的位置。我的解壓之後存放在D盤下面D:\opencv;這個路徑很重要,如果可以的話,可以和我的一樣,這樣就不用去思考到底後面該怎麼寫。我沒有嘗試配置過OpenCV 3.0以上的版本,希望以後有機會能夠更新一篇部落格,把配置3.0的步驟詳細的寫上來。
- 沒有了
下面開始配置
在開始欄裡選擇“計算機”->右鍵,選擇“屬性”,出現如下的界面,最後選擇“advanced system settings”(進階系統設定)

選擇上面卡片裡的“advanced”(進階選項),然後選擇下面的環境變量(environmental variables)
按照上面的步驟之後,出現下面的界面,然後輕按兩下選擇“system variables”裡面的“Path”
輕按兩下之後,會出現下面的輸入視窗,在“variable value”裡添加剛剛解壓的路徑下面的bin檔案所在路徑。這個地方好像很有講究,比如,如果你期待你将來編寫的程式是在32位機上面運作,那麼你就應該選擇32位的編譯器,那麼這裡填寫的應該就是X86;而如果你期待将來的程式是在64位機上面運作或者被調用,那麼你就應該選擇64位的編譯器,那麼這裡你就應該選擇X64那個檔案夾的bin所在的路徑。但是好像因為VS2010沒有64位版本,需要安裝什麼X64 compilers and tools。也就是說,正常的,簡單的,我們隻生成32位的程式,這裡填寫X86的;的當你需要生成64位程式的時候,請安裝X64 compilers and tools,并且把填寫上X64的bin所在的路徑。這部分的内容詳細可以參考CSDN辛亞平的部落格:關于Visual Studio 2010與64位系統的問題http://blog.csdn.net/yapingxin/article/details/7414084(作者顯示未經許可不得轉載,如果有問題,請聯系我删除)
如果使用的是VS2012,那麼就選vc11的路徑;如果使用的是VS2013,那就選vc12的路徑
然後就是到VS裡面去配置了。找到property manager,在view卡片下面就能找到。然後展開之後就可以編輯debug和release兩個property。我們先編輯debug版本的。輕按兩下紅色數字1所标黃的地方,Debug|Win32,彈出對話框,然後選擇紅色數字2所标記的地方,VC Directories,接着選擇紅色數字3所标記的地方,Include Directories。然後點選對應右邊的三角下拉标志,選擇編輯edit。這裡插一句話,當我們在後面的步驟執行完成之後,我們其實可以把這個sln檔案作為我們的模版,以後想要程式中使用OpenCV 的時候,我們直接複制一份這個模版,在複制出來的模版中進行後面的創作,這樣就可以節省下來配置的時間。當然,更進階的方法就是把那個項目屬性的檔案直接複制到别的項目的檔案夾下面,就可以省略下後面的配置步驟
添加如圖所示的路徑。可以手動輸入,VS會自動的識别,可以邊輸入邊通過鍵盤箭頭來選擇。輸入完畢之後确認即可。
然後改選library directories,同樣,像上面的那樣,選擇對應過去右邊的三角下拉箭頭,選擇編輯edit。如果使用的是VS2012,那麼就選vc11的路徑;如果使用的是VS2013,那就選vc12的路徑,對應關系是VC10(2010)、VC11(2012)、VC12(2013)
點選edit之後出現圖示的界面,像上面那樣輸入圖示的lib所在路徑
然後選擇左邊的Linker按鈕,輕按兩下之後展開,選擇Input,選擇additional dependencies,然後選擇對應過去右邊的三角下拉标志,選擇編輯edit,然後輸入下面的内容,因為現在是debug版本,是以每個後面都需要帶上d,其中如果你選擇的不是2.4.11版本,是2.4.12版本,隻需要改成2412d即可
opencv_calib3d2411d.lib
opencv_contrib2411d.lib
opencv_core2411d.lib
opencv_features2d2411d.lib
opencv_flann2411d.lib
opencv_gpu2411d.lib
opencv_highgui2411d.lib
opencv_imgproc2411d.lib
opencv_legacy2411d.lib
opencv_ml2411d.lib
opencv_nonfree2411d.lib
opencv_objdetect2411d.lib
opencv_ocl2411d.lib
opencv_photo2411d.lib
opencv_stitching2411d.lib
opencv_superres2411d.lib
opencv_ts2411d.lib
opencv_video2411d.lib
opencv_videostab2411d.lib
接下來就是為了配合之前我們在advanced system settings裡填寫的X86了,我們需要選擇下圖所示的左邊欄目裡的advanced,在target machine裡選擇MachineX86。
最後,還要調整Linker下面的manifest file裡的generate manifest,選擇為NO
下面這個配置好像是沒有什麼用的,因為我進入到這個界面之後似乎沒有做過調整,那一項目直接就是yes。另外,之前提到的三角下拉就是下面圖裡的YES右邊對應過去的那個黑色的三角下拉
接下來就是為了發行版release做的配置了,基本和上面的是一樣的隻不過後面最後複制的是不帶d的。首先,輕按兩下Release|Win32
首先配置additional dependencies,點選右邊的下拉三角,然後選擇編輯edit,把下面的内容粘貼上
opencv_calib3d2411.lib
opencv_contrib2411.lib
opencv_core2411.lib
opencv_features2d2411.lib
opencv_flann2411.lib
opencv_gpu2411.lib
opencv_highgui2411.lib
opencv_imgproc2411.lib
opencv_legacy2411.lib
opencv_ml2411.lib
opencv_nonfree2411.lib
opencv_objdetect2411.lib
opencv_ocl2411.lib
opencv_photo2411.lib
opencv_stitching2411.lib
opencv_superres2411.lib
opencv_ts2411.lib
opencv_video2411.lib
opencv_videostab2411.lib
然後就完事兒了。
可以使用下面的測試用例來試試看你配置的怎麼樣(需要在E盤下面放置一張名字為baboon.jpg的圖檔,因為有這個代碼句
img = imread("E:\\2016\\OpenCV\\baboon.jpg");
)
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
Mat img,img_processed;
int choice_slider = ;
int size_slider = ;
void proc()
{
Mat str_elmt = getStructuringElement(MORPH_RECT,Size(size_slider,size_slider));
if(choice_slider == )
{
erode(img,img_processed,str_elmt);
}
else
{
dilate(img,img_processed,str_elmt);
}
imshow("Processed Image",img_processed);
}
void on_choice_slider(int,void *)
{
proc();
}
void on_size_slider(int,void *)
{
int k_size = max(,size_slider);
k_size = k_size % == ?k_size + :k_size;
setTrackbarPos("Kernel Size","Processed Image",k_size);
proc();
}
int main()
{
img = imread("E:\\2016\\OpenCV\\baboon.jpg");
GaussianBlur(img,img_processed,Size(,),,);
Mat img_gray;
cvtColor(img_processed,img_gray,CV_RGB2GRAY);
Mat grad_x,grad_y;
Scharr(img_gray,grad_x,CV_32F,,);
Scharr(img_gray,grad_y,CV_32F,,);
pow(grad_x,,grad_x);
pow(grad_y,,grad_y);
Mat grad = grad_x + grad_y;
sqrt(grad,grad);
Mat edges;
grad.convertTo(edges,CV_8U);
namedWindow("Original Image");
namedWindow("Scharr Edges");
imshow("Original Image",img);
imshow("Scharr Edges",edges);
// waitKey(1);
while(char(waitKey() != ' '));
return ;
}