opencv坎坷之路

來源:互聯網
上載者:User
問題1:記憶體配置不足

運行opencv時會出現記憶體配置不足的情況:如下圖所示

OpenCV Error: Insufficient memory (Failed to allocate ……. )
一般也會伴隨著錯誤提示:Unhandled exception at at 0x76D85B68 in DEVISIGN_read.exe: Microsoft C++ exception: cv::Exception at memory location 0x0098EDDC.

開始想自己電腦32G記憶體,開啟工作管理員,記憶體使用量率還不到20%,很不理解為什麼出現這個記憶體不足以分配的問題。經過尋找資料,發現VS的配置是32位,VS分配是有限制的。那麼一次性最多分類4GB記憶體,當需要不斷分配記憶體很多時(處理視頻),可能就不足了。這個時候將VS的opencv重新設定為64位的,就可以解決記憶體配置不足的問題了。 問題2:錯誤 14 error C2589: “(”:“::”右邊的非法標記 和 錯誤 15 error C2059: 語法錯誤:“::” 1.錯誤碼:

const size_t key_size_upper_bound = std::min(sizeof(BucketKey) * CHAR_BIT + 1, sizeof(size_t) * CHAR_BIT);
2.錯誤原因分析:

std::min()的原意是找到std標準庫(C++定義的標準庫)中min的函數模板

        // TEMPLATE FUNCTION mintemplate<class _Ty> inline    _Post_equal_to_(_Right < _Left ? _Right : _Left)    const _Ty& (min)(const _Ty& _Left, const _Ty& _Right)    {   // return smaller of _Left and _Right    return (_DEBUG_LT(_Right, _Left) ? _Right : _Left);    }

但由於全域的宏的存在,優先順序比範圍操作符::高,發生衝突,會使用min的宏定義:

#define min(a,b)            (((a) < (b)) ? (a) : (b))

如果使用宏定義,那麼前面的範圍操作符::就使用錯誤了,出現以上的語法錯誤。 3.解決方案

消除歧義,將min指向std下的函數模板就可以。
第一種解決方案:給std::min加上括弧(std::min),與min宏定義區分開.
第二種解決方案(限於使用VS開發),設定項目屬性為不適用min宏定義,操作如下:

 項目屬性   ——> C/C++ ——> 前置處理器 ——> 前置處理器定義 (此處添加預定義編譯開關   NOMINMAX)

http://blog.csdn.net/ben_ben_niao/article/details/45971095

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.