天天看點

OpenCV廣泛問題,cv::findContours()函數使用時導緻的程式崩潰問題的解決方案

我使用的是OpenCV 2.4.13.6版本。

折騰半天,最後把dll庫項目的屬性,C/C++,代碼生成,運作庫:多線程調試(/MTd)改為多線程DLL調試(/MDd)就好了。

即:

在UI項目,配置屬性->正常->MFC的使用中,選擇共享DLL中使用MFC;

在算法dll庫項目,Debug,配置屬性->C/C++->代碼生成->運作庫中,選擇多線程DLL調試(/MDd)。

大概原因:

通過對出現的錯誤:__acrt_first_block == header可以大緻的知道是堆記憶體出現的問題,堆區一般都是用來申請配置設定動态數組時才會使用,而申請動态數組用的最多的就是使用關鍵字new[]進行申請配置設定。而我在程式中并未使用new,哪來的堆區的使用呢,通過查找資料了解到vector可以動态配置設定記憶體,是以問題極可能就出現在這上面。

--------------------------------------------------------end------------------------------------------------------

網上也有很多文章說手動配置設定記憶體,辦法我也試過,在我這沒效果。

vector<Vec4i>hierarchy(10000);

vector<Mat>contours(10000);//手動配置設定記憶體空間大小

findContours(Dst, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE);

//注意,記憶體空間不已設定過大,否則也會導緻程式崩潰.**

---

參考文獻

https://blog.csdn.net/auto1993/article/details/52694521 https://bbs.csdn.net/topics/391015107

繼續閱讀