2009-11-19 137 views
2

我最近安裝了OpenCV2.0 2008專業版,建庫,DLL-S和得到的一切工作,但是當我運行的第一個例子程序:打開CV + Visual Studio 2008中的Visual Studio下奇怪的調試問題

#include 「highgui.h」 
int main(int argc, char** argv) { 
IplImage* img = cvLoadImage(argv[1]); 
cvNamedWindow(「Example1」, CV_WINDOW_AUTOSIZE); 
cvShowImage(「Example1」, img); 
cvWaitKey(0); 
cvReleaseImage(&img); 
cvDestroyWindow(「Example1」); 
} 

,它直接進入調試模式,以下情況例外:Unhandled exception at 0x7855b9f0 in HelloOpenCV.exe: 0xC0000005: Access violation reading location 0x00000000.

也切換到「loadsave.cpp」文件,並將其指向行:

return (IplImage*)cv::imread_(filename, iscolor, cv::LOAD_IMAGE); 

在堆棧指針:> highgui200.dll!cvLoadImage(const char * filename=0x00000000, int iscolor=1) Line 474 + 0x13 bytes C++

我也做了PRINTSCREEN與Visual Studio調試窗口link text

我相信它是與錯位的依賴關係,與DLL-S的問題。 如果有人知道我能做些什麼來解決這個問題,請回答,我將永遠感激。

謝謝, 亞歷克斯

回答

0

這不是一個直接的答案,但我會試着問上OpenCV Yahoo Group。它非常活躍,有人必然會知道。任何時候我都會問一個問題,幾個小時後就會回覆。

3

您是否在argv[1]的命令行參數中指定了有效文件,即要讀取的圖像的filename

0

我認爲你的命令行參數不正確

確保命令行參數的有效性。

1

您需要驗證您是否有足夠的命令行參數。您應該添加這樣的事情開始的main():

if (argc < 2) 
{ 
    fputs("Usage: prog filename\n", stderr); 
    exit(1); 
} 
else if (argc > 2) 
{ 
    fputs("ignoring extra parameters\n", stdout); 
} 

你也可以修改代碼以使用依次在每個命令行選項(如果你這樣做,你想刪除有關額外警告在我上面的例子參數):

int arg; 
for (arg = 1; arg < argc; ++arg) 
{ 
    IplImage* img = cvLoadImage(argv[arg]); 

    ... the rest of your code ... 
} 

最後,因爲它從你在調試器中啓動您的可執行文件的屏幕截圖顯示,您將需要以添加命令行參數來修改你的屬性。在您的項目屬性中,您要選擇「調試」選項卡,然後將該文件添加到「命令參數」中。

0

正如其他答案所指出的,程序運行時沒有命令行參數。你應該做什麼R Samuel Klatchko said,這樣你的程序在運行時可以正常工作。

但除此之外,爲了幫助您使用正確的參數進行調試,您可以在調試器在「調試」選項卡上VS項目的屬性頁中啓動調試器時,指定要傳遞給程序的命令行參數。這是「命令參數」設置。