2013-03-12 2 views
0

я запускаю этот пример треску, и я получаю запустить исключение времениOpenCV пример кода ошибки времени выполнения с помощью ARGV []

#include "stdafx.h" 
#include <iostream> 
using namespace std; 


#include "opencv2/imgproc/imgproc.hpp" 
#include "opencv2/highgui/highgui.hpp" 

using namespace cv; 

int _tmain(int argc, char** argv) 
{ 
    //IplImage* img = cvLoadImage("Walk1001.jpg" ,1); 

    IplImage* img =cvLoadImage(argv[1]); 
    if(!img) 
    cout << "Could not open or find the image" << endl ; 



    cvNamedWindow("Example1", 1); 
    cvShowImage("Example1", img); 

    cvWaitKey(0); 
    cvReleaseImage(&img); 
    cvDestroyWindow("Example1"); 
    return 0; 
} 

, когда я использую IplImage* img = cvLoadImage("Walk1001.jpg" ,1); вместо этого IplImage* img =cvLoadImage(argv[1]); программы работает нормально. но в противном случае я получил ошибку.

Что делать с argv. я столкнулся со многими программами, в которых изображение загружается через какой-то argv[] syntex! как использовать этот массив (argv[]) или что еще?

+0

Что вы даете в ARGV? Вы понимаете, что argv - это указатель на набор строк, передаваемых в командной строке? В командной строке вы должны указать допустимый путь к файлу изображения. – Barshan

ответ

1

использовать массив ARGV, вы должны предоставить аргументы в вашу программу (от CmdLine или аналогичный)

prog.exe Walk1001.jpg 19 

Теперь ARGV имеет 3 элемента, [ "prog.exe", «Walk1001 .jpg», "19"], и ARGC == 3

в вашей программе, сделайте следующее:

char * imgPath="Walk1001.jpg"; // having defaults is a good idea 
if (argc > 1)    // CHECK if there's actual arguments ! 
{ 
    imgPath = argv[1];   // argv[0] holds the program-name 
} 

int number = 24; 
if (argc > 2)    // CHECK again, if there's enough arguments 
{ 
    number = atoi(argv[2]); // you get the picture.. 
} 

Sidenote: (! ничего плохого в том, что) вы вроде бы новичок, то OpenCV апи с годами изменилось, пожалуйста, не использование IplImage* и cv * Функции (1.0 api), использование cv :: Mat и функции из cv :: namespace.

using namespace cv; 
int main(int argc, char** argv) 
{ 
    char * imgPath="Walk1001.jpg"; 
    if (argc > 1)     
    { 
     imgPath = argv[1];   
    } 

    Mat img = imread(imgPath); 
    if (img.empty()) 
    { 
     cout << "Could not open or find the image" << endl ; 
     return 1; 
    } 

    namedWindow("Example1", 1); 
    imshow("Example1", img); 

    waitKey(0); 

    // no, you don't have to release Mat ! 
    return 0; 
} 
+0

Убей меня :) –

+0

спасибо, berak. Мне был известен аргумент командной строки с argv, но он был запутан в режиме отладки. Большое спасибо за объяснение. –

+0

и спасибо за предложение использования мата. –

0

Я получаю исключение во время работы. ошибка в строке 2482 неизвестной функции в array.cpp? Я думаю, что получаю это сообщение от imshow после отладки. Я использую Mat img=imread("walk100.jpg");, но img.total() возвращает NULL. почему imread возвращает NULL. cvload работает отлично.

Я решил, что в сети я узнал о ***d.dll. при добавлении файлов dll я опустил d, то есть для режима выпуска не для режима отладки. Так что я просто место «D», как opencv_core244d.dll вместо opencv_core244.dll

спасибо всем за ваш вклад

+0

ах, хорошо, что вы его решили;) – berak

Смежные вопросы