其實(shí)我不是安裝opencv,而是在另一個(gè)下載到的工程里,原作者引入了opencv的庫,像是這樣:
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/utility.hpp>
問題:1:我的電腦里壓根沒有opencv庫,所以要引入opencv庫

我是直接下載了
opencv的庫,丟進(jìn)包含目錄里面,包含目錄可以在工程>>屬性>>配置屬性>>VC++目錄>>包含目錄里,點(diǎn)開下拉選項(xiàng)編輯里看到完整的路徑,通過這個(gè)打開相應(yīng)的文件夾,把opencv庫丟進(jìn)去即可,當(dāng)然,也可以放到自己的工程下,用#include""雙引號的形式引用,或者直接在該工程的屬性里的包含目錄下再添加opencv的目錄,考慮到,以后下載的工程可能會用到,我就直接丟到編譯器的包含目錄下了。
- 問題1.5 :我第一次導(dǎo)入的是opencv2的庫,但實(shí)際上你要下載的是
opencv3的庫,因?yàn)?code>opencv2里缺少了一些需要導(dǎo)入的文件,例如需要的core文件夾里的utility.hpp文件。而且當(dāng)下完opencv3時(shí),會發(fā)現(xiàn),opencv3里的include文件夾里的名字,就是opencv2,= =,像是這樣:
opencv\build\include\opencv2
所以解決辦法是,要下載opencv3的庫并導(dǎo)入。這個(gè)問題其實(shí)是特別具體的問題,發(fā)生在別人身上的概率很低,只是順便提一下:如果你在別的項(xiàng)目里用到opencv,里面引入了opencv2這個(gè)文件夾下面的頭文件,并不意味著原來的項(xiàng)目用的是opencv2,因?yàn)閛pencv3里面的包含文件夾下也是opencv2這個(gè)文件夾名。
問題2:缺少 cuda_runtime.h文件。
這個(gè)我通過下載安裝cuda之后解決了,不用怎么配置,就到官方下載相應(yīng)的可執(zhí)行文件,安裝以后就解決了。
問題3:PCH 警告
錯(cuò)誤(活動) E2902 PCH 警告: 頭停止點(diǎn)需要位于全局范圍。未生成 IntelliSense PCH 文件。
這個(gè)問題,可能是一些類定義或者內(nèi)聯(lián)函數(shù)后面沒有加上;號,加上就可以了。我記得還有一次我改變了一下include文件的順序就解決了。好吧,其實(shí)我也不太懂。
問題4:鏈接錯(cuò)誤LNK2001,無法解析外部符號xxx
這種問題,無法解析外部符號的這個(gè)符號是最關(guān)鍵的,例如,我的這個(gè)錯(cuò)誤中,后面顯示了發(fā)生的位置,但是這可能只是在使用的時(shí)候檢測到的地方,也就是所,程序執(zhí)行到這里,突然發(fā)現(xiàn)執(zhí)行不下去了,某些符號解析不了,具體來說,大概率可以歸結(jié)為某個(gè)定義了的函數(shù)沒有實(shí)現(xiàn)這個(gè)原因。那么你就順著這個(gè)外部符號,比如我的錯(cuò)誤是 無法解析外部符號void __thiscall cv::String::deallocate ...,那么就說明是這個(gè)函數(shù)有問題(而不是別的),順藤摸瓜的,肯定就是opencv的某些東西沒有配置好。我已開始還以為是跟什么__cdecl或者__thiscall有關(guān),后來才知道那是函數(shù)調(diào)用的方式,只是加在前面說明這個(gè)函數(shù)是怎么調(diào)用的……后來又懷疑是不是后面那個(gè)發(fā)生的地方的某個(gè)庫或者obj文件少寫了什么,導(dǎo)致某些聲明的函數(shù)沒有實(shí)現(xiàn),由于我的這個(gè)項(xiàng)目的這些文件是修改過的,所以我又把原來的這些文件導(dǎo)回來,反復(fù)修改來修改去,最后還是錯(cuò),現(xiàn)在想想真是讓人哭笑不得。實(shí)際上,如果是源碼生成的obj文件沒有實(shí)現(xiàn),那么編譯一定是不會過的,因此這種情況大概率是某個(gè)庫,你只導(dǎo)入了頭文件(這里面有聲明),而沒有實(shí)現(xiàn)(實(shí)現(xiàn)一般在一些lib文件里)。好了搞清楚這些問題,那就是要引入這些lib文件,在屬性>>VC++>>附加庫目錄里,把你的那個(gè)庫目錄添加進(jìn)去,再在鏈接器>>輸入>>附加依賴項(xiàng)把那些庫的具體名字輸入進(jìn)去就可以了。僅此兩步,就這么簡單。但是,還要注意的是,庫(lib)是已經(jīng)編譯出來的一些obj文件的集合,那么他們在編譯時(shí)是用64位編譯還是用32位編譯時(shí)有區(qū)別的,因此,你自己編譯的時(shí)候也要注意,最好的辦法是,例如我在vs2017平臺下,我就把debug/release、win32/x64的四種組合都按照上述的兩步設(shè)置一遍即可。