1. 程式人生 > >【OpenCV】opencv2.4.10配置vs2010軟體的心得

【OpenCV】opencv2.4.10配置vs2010軟體的心得

                       關於opencv配置vs軟體的心得

   在這之前我先介紹一下VS的版本,vc10表示是VS2010,vc11表示VS2012,vc12表示VS2013.

1.opencv下載與安裝

        首先你可以到opencv的官方網站下載(免費的),opencv的版本很多,可以找一個網路上配置教程比較多的版本,因為這樣方便你解決問題。還有一個問題,那就是從官網下的opencv只支援vc11/vc12,那樣你可以選擇別的,比如opencv2.4.10可以支援vc10/vc11/vc12,opencv2.4.12支援vc11/vc12了。因為不喜歡vs12的風格,我還是堅持用vs10了。

        下載後直接解壓到你想安裝的盤,解壓即安裝,點選Extract解壓。解壓後大概是一個3Gb左右的檔案。

2.opencv的Windows環境變數配置

       首先右擊桌面上的“計算機”,選“屬性”,然後選擇“高階系統設定”。


       接著點選“環境變數”進入。


         在這裡,可以先在“使用者變數”這裡先新建一個OPENCV的變數。這裡是為了使後面的設定簡單點。變數值是你安裝的路徑,按照自己的路徑更改即可。

          變數名:OPENCV

           變數值:D:\opencv2.4.10\opencv\build

          然後,在“系統變數”裡找到“path”這個變數,點選編輯,然後在最後加上這句:    ;%OPENCV%\build\x64\vc10\bin   注意分號是必須的,用於隔開路徑。

            這樣我們就把Windows環境變數設定好了。

                                                            

3.配置vs2010

           這裡教一種一次配置永久使用的方法。

     3.1建立C++工程

          第一步,開啟VS2010,新建一個C++的工程。點選“檔案”->“Win32控制檯應用程式”,填寫工程的名稱,選擇儲存路徑。

然後點選“下一步”。



           然後,選中“空專案”,再點完成。這樣C++工程建立完畢。


            再建一個C++程式

 

3.2設定屬性管理檔案

     3.2.1在"Debug|Win32" 建立“OpencvDebugeconfig”配置檔案

             第二步,點選“屬性管理器”,我們要在"Debug|Win32"和"Release|Win32"新增一個配置檔案。


             右擊“Debug|Win32”,點選“新增新專案屬性表”。命名為“OpencvDebugeconfig”,然後點選新增


               然後選擇“OpencvDebugeconfig”檔案,點選“屬性”進行設定

 

        選擇“VC++目錄”->分別在“包含目錄”和“庫目錄”設定如下:

          包含目錄:新增3個路徑:

              D:\opencv2.4.10\opencv\build\include

              D:\opencv2.4.10\opencv\build\include\opencv2

              D:\opencv2.4.10\opencv\build\include\opencv

        庫目錄:新增1個路徑:

              D:\opencv2.4.10\opencv\build\x86\vc10\lib

 

                                                      

              然後在“連結器”->“輸入”->“附加依賴項”中輸入如下:

              至此,“Debug|Win32”裡的“OpencvDebugeconfig”就設定完全了。

opencv_ml2410d.lib

opencv_calib3d2410d.lib

opencv_contrib2410d.lib

opencv_core2410d.lib

opencv_features2d2410d.lib

opencv_flann2410d.lib

opencv_gpu2410d.lib

opencv_highgui2410d.lib

opencv_imgproc2410d.lib

opencv_legacy2410d.lib

opencv_objdetect2410d.lib

opencv_ts2410d.lib

opencv_video2410d.lib

opencv_nonfree2410d.lib

opencv_ocl2410d.lib

opencv_photo2410d.lib

opencv_stitching2410d.lib

opencv_superres2410d.lib

opencv_videostab2410d.lib


3.2.1在"Release|Win32" 建立“OpencvReleaseconfig”配置檔案

                同建立“OpencvDebugeconfig”的方法建立“OpencvReleaseconfig”屬性,“OpencvReleaseconfig”中的“包含目錄”和 “庫目錄”和“OpencvDebugeconfig”一樣。

          如下:

                選擇“VC++目錄”->分別在“包含目錄”和“庫目錄”設定如下:

                包含目錄:新增3個路徑:

                   D:\opencv2.4.10\opencv\build\include

                   D:\opencv2.4.10\opencv\build\include\opencv2

                   D:\opencv2.4.10\opencv\build\include\opencv

                庫目錄:新增1個路徑:

                  D:\opencv2.4.10\opencv\build\x86\vc10\lib

注意,“OpencvReleaseconfig”配置檔案在“連結器”->“輸入”->“附加依賴項”中輸入如下:

opencv_objdetect2410.lib

opencv_ts2410.lib

opencv_video2410.lib

opencv_nonfree2410.lib

opencv_ocl2410.lib

opencv_photo2410.lib

opencv_stitching2410.lib

opencv_superres2410.lib

opencv_videostab2410.lib

opencv_calib3d2410.lib

opencv_contrib2410.lib

opencv_core2410.lib

opencv_features2d2410.lib

opencv_flann2410.lib

opencv_gpu2410.lib

opencv_highgui2410.lib

opencv_imgproc2410.lib

opencv_legacy2410.lib

opencv_ml2410.lib

            然後儲存“OpencvDebugeconfig” 和“OpencvReleaseconfig”配置檔案,


          這樣設定就全部完成了。

4.程式測試

         測試程式,在C++程式中寫如下:

#include <iostream> 

#include <opencv2/core/core.hpp> 

#include<opencv2/highgui/highgui.hpp> 

using namespace cv;   

int main() 

   Mat img=imread("pic.jpg");//讀入一張圖片

   namedWindow("Test");     //建立一個名為Test視窗

   imshow("Test",img);   //視窗中顯示影象

   waitKey(5000);            //等待5000ms後窗口自動關閉

}

 

5.我遇到的問題

       1.>LINK : fatal error LNK1123:轉換到 COFF期間失敗:檔案無效或損壞

         我使用了方法二。

          問題說明:

         當安裝VS2012之後,原來的.NET 4.0會被替換為.NET 4.5。解除安裝VS2012時,不會恢復.NET 4.0。

        l當VS2012安裝後,VS2010的cvtres.exe就無法使用了。如果你的PATH環境變數中VS2010的工具路徑第一個出現,而且連結器需要將.res檔案轉換為COFF 物件格式,就會導致LNK1123錯誤。

        l當VS生成PE檔案頭時,使用的cvtres.exe版本錯誤,不能與當前的.NET平臺相容。

          解決方案:

           參考:

           http://stackoverflow.com/questions/10888391/link-fatal-error-lnk1123-failure-during-conversion-to-coff-file-invalid-or-c

           因為是cvtres.exe版本錯誤導致的結果,所以凡是能使VS連結器找到正確的cvtres.exe版本的方法都可以解決該問題。或者使VS連結器不生成COFF的方法都可以。

【方法一】

            當前系統中存在兩個cvtres.exe檔案,版本不同。讓VS2010使用.NET 4.5的cvtres.exe程式。

      具體步驟:

        重新命名或刪除:(vs2010安裝的位置)C:\Program Files (x86)\Microsoft Visual Studio10.0\VC\bin\cvtres.exe

        這樣C:\Windows\Microsoft.NET\Framework\v4.0.30319(.NET 4.5)中的cvtres.exe檔案就可以被VS2010使用。

【方法二】

       解決方法如下:

         專案\屬性\配置屬性\清單工具\輸入和輸出\嵌入清單:原來是“是”,改成“否”。

          說明:這種方法每個工程均需要修改配置。

【方法三】

          安裝:VS2010 SP1. 該版本應該是能使用.NET 4.5的,並配有正確的cvtres.exe版本。

          注意:安裝VS 2010 SP1 時會移除64-bit 編譯器. 通過安裝 VS 2010 SP1 compiler pack 能夠重新獲得。

【方法四】

         解除安裝.NET 4.5,重灌.NET 4.0

2. Windows資料夾下加入OpenCV動態連結庫的問題

          這一步是各種介紹OpenCV的配置的相關博文中都沒寫出來的。根據這些博文配置出來的環境,在執行基於OpenCV的程式的時候,往往會得到這樣類似的結果:

 

        這種問題最簡單粗暴的方法,是把相關的dll都拷貝到Windows作業系統的目錄下。如果你的Windows安裝在C盤,那麼路徑就是C:\Windows。按照之前我的OpenCV的存放環境,這些dll存放在

        D:\Program Files\opencv\build\x86\vc10\bin目錄下。


          到這個目錄下,【Ctrl+A】全選,【Ctrl+C】拷貝,然後轉到C:\Windows下面,【Ctrl+V】複製,簡單粗暴地就完成了。

          恩,環境配置大功告成,我們來測試一下成果吧~

6.參考網頁資料

【1】【OpenCV入門教程之一】OpenCV 2.4.8 +VS2010的開發環境配置:

【2】Visual Studio2010配置Opencv2.4.9:

【3】Windows7+VS2010下OpenCV環境配置:

【4】vs2010 問題 >LINK :fatal error LNK1123: 轉換到 COFF 期間失敗: 檔案無效或損壞:

【5】OpenCV學習-——OpenCV永久配置(win7 64位+VS2012+OpenCV 2.4.6)