2011-11-17 161 views
5

我可以建立及以下成功執行的代碼:未處理的異常+ VS2010

IplImage* img = cvLoadImage("C:\\hello.jpg"); 
cvNamedWindow("myfirstwindow"); 
cvShowImage("myfirstwindow", img); 

但是,當執行下面的代碼,我得到了未處理的異常:

cv::Mat image= cv::imread("boldt.jpg"); 
    cv::namedWindow("Image"); 
    cv::imshow("Image",image); 

雖然,我可以建立代碼成功。

我在Windows 7 x86版本上使用opencv2.2與VS2010 x86版本。 請幫忙!

更新:我在winxp上試過了,它工作正常......並且它僅適用於發佈模式下的win7。

回答

3

我使用的是OpenCV 2.3.1,當我在Release模式下運行它(鏈接到發行版的highgui lib)時,一切都很好。 當我切換到調試模式(仍然鏈接到釋放highgui庫)時,它崩潰。連接到調試高級庫幫助。

也許你有同樣的問題...

+0

是的,我們得到了同樣的問題。我更新到OpenCV2.3.1並仍然在調試模式下崩潰,但在發佈模式下工作正常。 – Zombia

+2

在vc10中爲您的項目分開調試和發佈.libs ..修正了我的問題 – Mattias

1

你檢查了imread()函數的輸出嗎?

if(image.empty()) 
{ 
     cout << "where's my image?" << endl; 
     return 0; 
} 
+0

感謝您的答案。單行錯誤發生了unhandle異常:「cv :: Mat image = cv :: imread(」1。 jpg「);」..我認爲imread函數不能在我的VS2010中執行。 – Zombia

5

這可能是那裏的人們沒有意識到,當VStudio運行應用程序它試圖找到它的資源,在同一目錄中編譯的可執行文件和的文件夾在源問題文件是。

您的第一個代碼有效,因爲您正在加載傳遞完整路徑到文件的圖像!

這就是爲什麼如此重要的檢查功能的成功,當你編碼:

try 
{ 
    cv::Mat image = cv::imread("boldt.jpg"); 

    if (!image.data) 
     printf("!!! No data !!!"); 
} 
catch(std::exception e) 
{ 
    printf("Exception: [%s]\n", e.what()); 
} 

這種類型的編程習慣會爲你節省大量的時間。

編輯

好了,如果崩潰仍然發生這意味着它可以是cv::namedWindow()cv::imshow()故障,並my money is on cv::namedWindow()

其他用戶報告在Windows類似的行爲:

OpenCV 2.2 Windows XP MinGW build crashes on namedWindow, imshow

Open CV crashes under WIN7 when opening NamedWindow

namedWindow() causes crash in opencv 2.3.1? (Eclipse+MinGW on XP, C++)

似乎to solve the problem you need to disable SSE優化。

+0

感謝您的答案..但我改變爲完整路徑後仍然遇到同樣的問題。上面的異常代碼也沒有工作,並執行代碼時得到相同的未處理的異常錯誤。 – Zombia

+1

已更新答案!這可能是[Windows上的OpenCV的已知錯誤](https://code.ros.org/trac/opencv/ticket/583)。 – karlphillip

+0

感謝您的答覆..更新至2.3.1後,崩潰仍然發生,SSE方法對我無效..無論如何,它在發佈模式下工作良好,似乎是一個很好的替代解決方案。 :) – Zombia

1

我有完全相同的問題已被描述。

事實證明,問題非常多在於鏈接器的設置!

我發現在另一個線程答案: OpenCV 2.3 and Visual Studio 2010

這就是:

「項目的屬性(右鍵點擊它)

  • C/C++
    • 通用
      • 包括目錄添加<目錄> \ OpenCV2.3 \ \包括opencv2,<目錄> \ OpenCV2.3 \包括\ OpenCV的和<目錄> \ OpenCV2.3 \包括
  • 鏈接

    • 一般
      • 列表項
    • 輸入
      • 添加都喜歡opencv_core230d.lib opencv_highgui230d.lib等等庫......」

一旦我做了上述情況,我可以imshow運行和imread +其他CPP功能無縫!提出這個問題的作者可能已經解決了這個問題。但以防萬一有其他人在這裏領導尋找相同的解決方案!

乾杯!

0

檢查在生成編譯的文件夾,因爲他們中的一個是。 exe編譯,並且可能您想要打開的圖像不存在。在我的情況下。exe文件(在Debuge模式下)位於C:\ Users \ Name \ source \ repos \ HolaMundox \ x64 \ Debug中,而不是創建C:\ Users \ Name \ source \ repos \ HolaMundox中的.cpp文件。類似的東西將適用於發佈模式。 另一件事是,你必須檢查圖像的擴展名,如果它是.jpg,.jpeg,.bmp,等......我有一個錯誤是我把extención.jpg,它是。 JPEG。