2013-01-17 65 views
1

我需要打印我的Mat對象,並且programm拋出異常...該項目非常簡單:創建Mat對象並使用cout進行打印 - 就像在OpenCV教程中一樣:opencv:使用與Mat對象拋出異常的cout

#include <core/core.hpp> 
#include <highgui/highgui.hpp> 

#include <iostream> 

using namespace std; 
using namespace cv; 

int main(int argc, char *argv[]) 
{ 
    Mat O = Mat::ones(2, 2, CV_32F); 
    cout << "O = " << endl << " " << O << endl << endl; 

    // Point2f P(5, 1); 
    // cout << "Point (2D) = " << P << endl << endl; 

return 0; 
} 

例外說:Unhandled exception at 0x59430671 (msvcp100d.dll) in printingTest.exe: 0xC0000005: Access violation reading location 0x00000000。控制檯顯示僅

O = [ 

正是它停在「operations.hpp」上:

static inline std::ostream& operator << (std::ostream& out, const Mat& mtx) { Formatter::get()->write(out, mtx); return out; } 

似乎「走出去」是空的,但沒有人知道爲什麼嗎?教程說,它應該工作...

我引發異常早前類似的問題,我在這裏解決了它:

http://answers.opencv.org/question/5113/problem-with-reading-image-to-mat/

是否有可能還有另外一個環境變量衝突?或者可能是碰撞'因爲我使用VS2012,並且OpenCV僅適用於v10?

帶註釋Point2f的東西正常工作。

+3

您正在使用使用VS10構建的OpenCV。 DLL中的'ostream操作符<<'使用VC 10 Runtime中的操作符。當您從VC 11 Runtime調用'ostream operator <<'時。這些DLL是衝突的。 – sgarizvi

+1

作爲一個方面說明,使用諸如「O」,「l」等名稱來命名變量不是一個好習慣。 – lightalchemist

+0

@ sgar91 OpenCv只有VC10庫。有沒有可能只有這不起作用,其他一切都很好?這很傷心.. – bee

回答

1

你的代碼在VS2010中可以正常工作。確保你正在鏈接正確的庫(發佈版與調試版)。如果這無助於嘗試重新安裝openCV或在VS2012上自行構建,請使用cmake從源代碼中進行準備。

+0

關鍵是,我在搜索互聯網,有時候在某人的電腦上工作,有時候不工作。鏈接庫是好的。我也在CMake上構建,仍然是同樣的錯誤... – bee

+0

你真的用VS2012使用cmake的輸出重新編譯了整個庫並使用這些自建庫? –

+0

是的,我有。也許我做錯了什麼?我設置了「源代碼在哪裏」(C:\ opencv - 就是它的位置)和「在哪裏創建二進制文件」我剛剛在C:\ opencv \ opencv_debug中創建了一個新文件夾。我選擇了Visual Studio 11作爲生成器,然後進行配置,爲ipp和tbb設置丟失的路徑(因爲我將來會使用它),再次配置然後生成。 CMake創建了OpenCV解決方案,所以我在VS中運行它。然後在我的項目中,我在鏈接器C:\ opencv \ opencv_debug \ lib \ Debug中的Properties中進行設置。對包含的提示也一樣。 – bee