天天看點

Windows系統下qt開發融合pylon,opencv,opencascade 等庫的工程qt版本選擇opencv版本選擇opencascade 版本選擇pylon相機庫Note:總結

關鍵詞:win10,qt,opencv,opencascade,pylon,編譯

本文主要内容:如何選擇版本,以使pylon,opencv,opencascade等庫能協同工作。opencv的編譯,opencascade 的編譯。以及連結到的以前再Ubuntu系統中用qt做的相關内容。本文涉及到的部分代碼不便流傳,在此就不展示了,畢竟授人以魚不如授人以漁。

qt版本選擇

qt選擇32位的版本:qt-opensource-windows-x86-msvc2015-5.7.1.exe ,這樣編寫的程式才能調用32位的庫。不然會出現“error: LNK1112: 子產品計算機類型“X86”與目标計算機類型“x64”沖突”筆者電腦上32位和64位的都安裝了,最終測試結果是32位比64位好用。

opencv版本選擇

opencv 2.4.10 解壓縮的編譯好的版本隻有vc10到vc12,自己編譯32位的vc14版本。隻有32位的vc14版本能用。64位的版本不能調試,提示the cdb process terminated錯誤。 32位的版本試過vc10和vc12,能編譯通過,在運作時某些函數會抛出異常,目前發現的是解PnP和找輪廓這兩個函數。

也試着使用過opencv的3.4.0版本,編譯後的64位版本編譯通過但是不能調試,32位版本會有“無法解析的外部符号”,因為在這些外部符号中有“cuda”字樣,是以懷疑是在編譯的時候預設勾選了帶CUDA的選項,編譯qt版本是一定要勾選WITH_QT和WITH_OPENGL選項。關于cuda的問題,沒有繼續測試,但理論上來說,隻要不使用cuda選項,編譯出的32位的vc14版本應該能用。

opencv編譯方法

opencv下載下傳的編譯好的自解壓包有時不一定有我們需要的版本,需要自己進行編譯。可以參考這個http://blog.csdn.net/donglany/article/details/53736729,筆者在編譯時使用的cmake版本是3.3.2。

Windows系統下qt開發融合pylon,opencv,opencascade 等庫的工程qt版本選擇opencv版本選擇opencascade 版本選擇pylon相機庫Note:總結

opencascade 版本選擇

opencascade 7.2.0 下載下傳的是源碼,目前在用的是自己編譯的32位的vc14版本。關于這個版本選擇,筆者也曾測試多次,最終發現類似于opencv,64位的版本,不管是vc10還是vc14,都不能調試,提示the cdb process terminated錯誤。32位的vc10版本,會出現“無法解析的外部符号”(庫都添加好了),官方提供的例子也提示“無法解析的外部符号”。最後測試發現隻有32位的vc14版本可以使用。

opencascade 的編譯

先在官網

https://www.opencascade.com/content/latest-release

下載下傳最新版本。

Windows系統下qt開發融合pylon,opencv,opencascade 等庫的工程qt版本選擇opencv版本選擇opencascade 版本選擇pylon相機庫Note:總結

然後下載下傳對應vs版本和位數的第三方庫

https://www.opencascade.com/content/3rd-party-components

解壓第三方庫,并放到指定位置。

如果不知道解壓縮後的庫放到哪兒,可以下載下傳windows安裝版,安裝完成後看看安裝目錄下的檔案結構就知道解壓縮後的庫檔案放哪兒了。

Windows系統下qt開發融合pylon,opencv,opencascade 等庫的工程qt版本選擇opencv版本選擇opencascade 版本選擇pylon相機庫Note:總結

然後需要修改custom.bat這個檔案,用文字編輯軟體打開,修改編譯平台,位數,使能子產品,各個使能子產品路徑設定等。

然後運作msvc.bat打開vs工程。按照這個部落格中提供的順序進行編譯:

http://www.cppblog.com/eryar/archive/2012/08/13/187100.html

pylon相機庫

官方提供的最新5.0.11版本是32位和64位的vc12版本。根據以上opencv 和opencascade 的測試結果來看,需要vc14版本。但是在實際使用時,32位的vc12版本也可以在目前配置好的環境中使用。關于pylon相機的驅動和庫等檔案下載下傳,可以參考筆者寫的另一篇介紹pylon相機在Ubuntu系統下使用的部落格,https://blog.csdn.net/iamqianrenzhan/article/details/79413123。

Note:

在同一個工程中使用這些庫的時候,庫代碼中的宏定義之類的很容易沖突,印象最深的有一個是不能使用using namespace cv;,需要在每個類型和函數前加cv::。還有一些沖突,需要注意把庫中的h檔案包含到

cpp檔案。

筆者程式中除了這幾個子產品,還有序列槽,TCP,XML檔案等子產品,但這都是與qt平台直接提供的子產品,整合到一起比較容易。這個項目原來曾經用MFC實作過一部分功能,但是筆者認為MFC是一個過于老舊的界面開發平台,而且QT的信号槽機制又大大簡化了程式設計,比MFC更加友善,于是從頭學QT,并把原來MFC的功能移植過來。

總結

最終,經過大量測試,終于把opencv opencascade pylon在qt平台下配置到了一起。由于qt的跨平台特性,目前還希望把這套東西在Ubuntu系統下也能編譯通過。目前除opencascade 外都已經實作,可以參考筆者的另一篇文章https://blog.csdn.net/iamqianrenzhan/article/details/79413123。