1. 程式人生 > >OpenCV環境搭建(VS2013 + opencv3.4)

OpenCV環境搭建(VS2013 + opencv3.4)

一、VS配置第三方庫

1、 .lib  .dll都是什麼鬼

      大家使用的第三方庫或者SDK時候,會發現其本質都是這三種類型的檔案:a、標頭檔案(.h),b、靜態連結庫檔案(.lib)c、動態連結庫檔案(.dll)。

    1)標頭檔案(.h)。大家知道,C++一般把函式宣告都放在標頭檔案中,如果你想使用我寫的函式,你就需要引入我的標頭檔案。否則你根本就不知道函式的名字。

    2)靜態連線庫檔案(.lib)。引入了標頭檔案,只有函式宣告,沒有函式實現,你還是用不了這個函式的,在VC下編譯就會報一堆連線錯誤,原因就是沒有找到函式實現。那麼動態連結庫和靜態連結庫說白了,就是函式實現。我們先說靜態連結庫,靜態連線庫分為兩種,一種是隻有個殼子(不包括函式實現的一些描述性資訊,如函式起始地址等),另一種是完整的函式實現(這種是不需要動態連結庫的)。不論哪一種,對於程式來說,都可以編譯通過了,只不過第一種在程式執行時會報錯(第二種不會),因為程式在跳轉到函式入口時會出錯(就像我告訴你一個假地址,你是不可能找到這個地方一樣),這就需要了我們接下來要說的動態連結庫了。

    3)動態連結庫檔案(.dll)。前面已經說到了,動態連結庫檔案就是函式的具體實現。他可以和靜態連結庫一起搭配使用,也可以不通過靜態連結庫使用(LoadLibrary函式)。這個檔案是程式執行時需要的檔案。

2、VS的配置項

    VS的配置都在解決方案的屬性一欄中,本次我們講的主要針對如何新增第三方庫來進行配置。

    1)配置標頭檔案。#include<...>搜尋的是系統預設路徑。我之前遇到了一個#include<iostream>找不到標頭檔案的問題,一看屬性發現系統預設路徑讓我去掉了。沒有路徑他肯定找不到了。#include"..."搜尋的是使用者指定的路徑和當前路徑。如果你想讓你的vs知道相關的標頭檔案,你就需要把標頭檔案所在的路徑配置進去。配置項為:屬性->配置屬性->VC++目錄->包含目錄。或者是屬性->C/C++->常規->附加包含目錄。注意,這兩個配置項只需配置一個即可。  

    2)配置靜態連結庫。配置項:屬性->配置屬性->VC++目錄->庫目錄,或者是:屬性->配置屬性->聯結器->常規->附加庫目錄。我們把動態連結庫的地址告訴了編譯器,但是那個目錄下可能有很多檔案,他不知道去載入那一個檔案,不想配置標頭檔案是你指定了那個檔案(#include"標頭檔案名字"),所以我們還需要告訴編譯器,我們的動態連結庫的名字,配置項:屬性->配置屬性->聯結器->輸入->附加依賴項。配置內容:****.lib(靜態連線庫的全名)。

    3)配置動態連結庫。這就扯淡了,都說了是動態連結庫,配置個屁啊,只需將動態連結庫和程式放在一起即可。(一定要放在一起,要不程式執行不起來的)

二、配置OpenCV環境

1、下載opencv

    我下載的是opencv-3.4.0原始碼,編譯出來的庫,包括32位和64位的Debug和Release版本,有需要的可以下載,只不過需要2積分,第一次寫部落格,不知道如何能免費,有點小尷尬。

https://download.csdn.net/download/hello_world_156_5634/10316498

2、配置

    我建議大家把opencv的檔案和工程放在一起,填寫的路徑用相對路徑,這樣別人在用你的工程是就不用再配置opencv了。

    1)新建工程

建立個空專案。(空不空都無所謂,只不過空專案省心,沒有亂七八糟的檔案)

將專案改成Release X64,(在屬性->配置管理器中修改,沒有X64新建一個)不改也行,只不過後面的配置要對應平臺(win32/X64)(Debug/Release),動態連結庫和靜態連結庫都要對應平臺,名字末尾帶“d”的對應Debug。

    

將opencv 檔案移到工程目錄下(OpenCV下)

新建個原始檔。

配置包含目錄,我的所有配置寫的都是相對路徑,如果想換機器或者建立一個新的工程, 直接複製整個工程就可以了,不用頻繁的配置,雖說這樣簡便,但是我還是覺得大家應該學會如何配置。

 

 配置靜態連結庫


 配置附加依賴項(我之前用的是2.4.9版本,這版是3.4.0,這兩版還是有區別的,一開始沒有加最後一個靜態連結庫,提示找不到imread這個函式,後來加上這個庫就OK了,原來3.4.0把imread函式放在最後一個庫中了,如果大家不知道你要用的函式在那,最笨的辦法就是全加上閉嘴


 寫程式碼:

#include <iostream>
#include <opencv2\opencv.hpp>

using namespace std;
using namespace cv;


int main()
{
	Mat img = imread("D:/1.jpg");
	imshow("Hello OpenCV", img);
	waitKey();

	return 0;
}

生成程式,然後找動態連結庫(一定要注意和你生成的工程相對應。debug還是release)


執行就OK了


之前以為部落格很好寫,但是自己真正寫的時候就發現眼高手低了,這點東西居然寫了一下午,真是服氣。希望這篇部落格能夠幫助到你吧。感謝閱讀,Best wishes!