64位Win 7配置VS2010使用openCV 2.4.11

(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 system settings”(高級系統設置)


選擇上面卡片裏的“advanced”(高級選項),然後選擇下面的環境變量(environmental variables)
選擇上面卡片裏的“advanced”(高級選項),然後選擇下面的環境變量(environmental variables)


按照上面的步驟之後,出現下面的界面,然後雙擊選擇“system variables”裏面的“Path”
按照上面的步驟之後,出現下面的界面,然後雙擊選擇“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的路徑
雙擊之後,會出現下面的輸入窗口,在“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所在的路徑。*如果使用的是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裏面去配置了。找到property manager,在view卡片下面就能找到。然後展開之後就可以編輯debug和release兩個property。我們先編輯debug版本的。雙擊**紅色數字1**所標黃的地方,Debug|Win32,彈出對話框,然後選擇**紅色數字2**所標記的地方,VC Directories,接着選擇**紅色數字3**所標記的地方,Include Directories。然後點擊對應右邊的三角下拉標誌,選擇編輯edit。這裏插一句話,當我們在後面的步驟執行完成之後,我們其實可以把這個sln文件作爲我們的模版,以後想要程序中使用OpenCV 的時候,我們直接複製一份這個模版,在複製出來的模版中進行後面的創作,這樣就可以節省下來配置的時間。當然,更高級的方法就是把那個項目屬性的文件直接複製到別的項目的文件夾下面,就可以省略下後面的配置步驟


添加如圖所示的路徑。可以手動輸入,VS會自動的識別,可以邊輸入邊通過鍵盤箭頭來選擇。輸入完畢之後確認即可。
添加如圖所示的路徑。可以手動輸入,VS會自動的識別,可以邊輸入邊通過鍵盤箭頭來選擇。輸入完畢之後確認即可。


然後改選library directories,同樣,像上面的那樣,選擇對應過去右邊的三角下拉箭頭,選擇編輯edit。如果使用的是VS2012,那麼就選vc11的路徑;如果使用的是VS2013,那就選vc12的路徑,對應關係是VC10(2010)、VC11(2012)、VC12(2013)
然後改選library directories,同樣,像上面的那樣,選擇對應過去右邊的三角下拉箭頭,選擇編輯edit。***如果使用的是VS2012,那麼就選vc11的路徑;如果使用的是VS2013,那就選vc12的路徑***


點擊edit之後出現圖示的界面,像上面那樣輸入圖示的lib所在路徑
點擊edit之後出現圖示的界面,像上面那樣輸入圖示的lib所在路徑


然後選擇左邊的Linker按鈕,雙擊之後展開,選擇Input,選擇additional dependencies,然後選擇對應過去右邊的三角下拉標誌,選擇編輯edit,然後輸入下面的內容,因爲現在是debug版本,所以每個後面都需要帶上d,其中如果你選擇的不是2.4.11版本,是2.4.12版本,只需要改成2412d即可
然後選擇左邊的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。
接下來就是爲了配合之前我們在advanced system settings裏填寫的X86了,我們需要選擇下圖所示的左邊欄目裏的advanced,在target machine裏選擇MachineX86。


最後,還要調整Linker下面的manifest file裏的generate manifest,選擇爲NO
最後,還要調整Linker下面的manifest file裏的generate manifest,選擇爲NO


下面這個配置好像是沒有什麼用的,因爲我進入到這個界面之後似乎沒有做過調整,那一項目直接就是yes。另外,之前提到的三角下拉就是下面圖裏的YES右邊對應過去的那個黑色的三角下拉
下面這個配置好像是沒有什麼用的,因爲我進入到這個界面之後似乎沒有做過調整,那一項目直接就是yes。另外,之前提到的**三角下拉**就是下面圖裏的YES右邊對應過去的那個黑色的**三角下拉**


接下來就是爲了發行版release做的配置了,基本和上面的是一樣的只不過後面最後複製的是不帶d的。首先,雙擊Release|Win32
接下來就是爲了發行版release做的配置了,基本和上面的是一樣的只不過後面最後複製的是**不帶d***的。首先,雙擊Release|Win32


首先配置additional dependencies,點擊右邊的下拉三角,然後選擇編輯edit,把下面的內容粘貼上
首先配置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 = 0;
int size_slider = 5;

void proc()
{
    Mat str_elmt = getStructuringElement(MORPH_RECT,Size(size_slider,size_slider));
    if(choice_slider == 0)
    {
        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(1,size_slider);
    k_size = k_size % 2 == 0?k_size + 1:k_size;
    setTrackbarPos("Kernel Size","Processed Image",k_size);
    proc();
}
int main()
{
    img = imread("E:\\2016\\OpenCV\\baboon.jpg");
    GaussianBlur(img,img_processed,Size(3,3),0,0);

    Mat img_gray;
    cvtColor(img_processed,img_gray,CV_RGB2GRAY);

    Mat grad_x,grad_y;
    Scharr(img_gray,grad_x,CV_32F,1,0);
    Scharr(img_gray,grad_y,CV_32F,0,1);

    pow(grad_x,2,grad_x);
    pow(grad_y,2,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 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章