opencv與wxwidgets衝突(第三方庫jpeg,tiff,png,zlib所引起)

來源:互聯網
上載者:User

問題:opencv與qwxwidgets都靜態連結到tiff,jpeg,png,zlib四個庫,當opencv使用靜態編譯時間,在wxwidgets的event事件中處理使用opencv讀寫jpg,tiff,png圖片有時候會出錯。原因是opencv讀取圖片的代碼可能與wxwidgets衝突了(具體原因未深入研究)。我遇到的情況是讀寫jpg檔案來出錯,讀寫png,tiff檔案正常。

對比opencv與wxwidgets使用第三方映像庫的版本如下(版本沒有大改動,按理說應該不會有問題,除非有一方的代碼實現對其進行了某些改動)
第三方庫 opencv242 wxWidgets294
jpeg 6b (6.2) 6b
png 1.5.9 1.5.7
tiff 4.0.1 3.8.2
zlib 1.2.6 1.2.3

解決辦法:雙方都使用同一個第三方映像庫
前提:擁有已經編譯好的第三方映像庫。(下載原始碼,用gcc編譯一下,不難)
opencv 有BUILD_***, WITH_***(其中***表第三方庫名稱)這兩種選項。取消BUILD_***,選中WITH_***表示不使用opencv內部的第三方庫,但支援讀取***映像的功能。由於取消了BUILD_***,所以必須手動指定這些庫的位置,不然opencv還是會使用自身帶的第三方庫的。指定庫的位置指指定其include,lib的位置,如zlib庫需定義ZLIB_LIBRARY
ZLIB_INCLUDE_DIR兩個變數。cmake可以命令列中指定也可以介面中指定,介面中指定效果如下:

people3.jpg (128.13 KiB) 被瀏覽 7 次



提醒一下:本人使用這個方法它只能識別tfii,zlib. png與jpeg庫cmake還是檢測不到,不知道為什麼。最後是直接使用opencv產生的第三方庫作為系統的第三方庫給wxwidgets連結的。

wxwidgets方法就簡單多了,它提供了--with-***=sys的選項(但只能在./configure中配置,所以使用mingw32-make編譯它提供的makefile.gcc是不行的,得使用msys環境自己配置一下makefile檔案).
這是我使用的命令./configure --enable-unicode --enable-static --disable-shared --enable-monolithic --with-libpng=sys --with-zlib=sys --with-libtiff=sys --with-libjpeg=sys. 同樣,這也得讓gcc找得到第三方映像庫的位置(這個簡單,把第三方映像為的標頭檔和庫檔案放到gcc的include與lib檔案夾裡),不然configure不成功。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.