diff --git a/modules/objdetect/src/_lsvm_error.h b/modules/objdetect/src/_lsvm_error.h index 7de5448e0..1d6fb633b 100644 --- a/modules/objdetect/src/_lsvm_error.h +++ b/modules/objdetect/src/_lsvm_error.h @@ -12,5 +12,6 @@ #define FILTER_OUT_OF_BOUNDARIES -7 #define FFT_OK 2 #define FFT_ERROR -8 +#define LSVM_PARSER_FILE_NOT_FOUND -9 #endif diff --git a/modules/objdetect/src/latentsvmdetector.cpp b/modules/objdetect/src/latentsvmdetector.cpp index add81acbf..336a360f2 100644 --- a/modules/objdetect/src/latentsvmdetector.cpp +++ b/modules/objdetect/src/latentsvmdetector.cpp @@ -22,8 +22,10 @@ CvLatentSvmDetector* cvLoadLatentSvmDetector(const char* filename) int* kPartFilters = 0; float* b = 0; float scoreThreshold = 0.f; + int err_code = 0; - loadModel(filename, &filters, &kFilters, &kComponents, &kPartFilters, &b, &scoreThreshold); + err_code = loadModel(filename, &filters, &kFilters, &kComponents, &kPartFilters, &b, &scoreThreshold); + if (err_code != LATENT_SVM_OK) return 0; detector = (CvLatentSvmDetector*)malloc(sizeof(CvLatentSvmDetector)); detector->filters = filters; diff --git a/modules/objdetect/src/lsvmparser.cpp b/modules/objdetect/src/lsvmparser.cpp index 72b9dcb5c..a87416fdb 100644 --- a/modules/objdetect/src/lsvmparser.cpp +++ b/modules/objdetect/src/lsvmparser.cpp @@ -2,6 +2,7 @@ #include #include "string.h" #include "_lsvmparser.h" +#include "_lsvm_error.h" int isMODEL (char *str){ char stag [] = ""; @@ -736,7 +737,7 @@ int LSVMparser(const char * filename, filterObject *** model, int *last, int *ma xmlf = fopen(filename, "rb"); if(xmlf == NULL){ - return -1; + return LSVM_PARSER_FILE_NOT_FOUND; } i = 0; @@ -767,7 +768,7 @@ int LSVMparser(const char * filename, filterObject *** model, int *last, int *ma } } } - return 0; + return LATENT_SVM_OK; } int loadModel( @@ -789,8 +790,8 @@ int loadModel( //printf("start_parse\n\n"); err = LSVMparser(modelPath, filters, &last, &max, &comp, b, &count, &score); - if(err != 0){ - return -1; + if(err != LATENT_SVM_OK){ + return err; } (*kFilters) = last + 1; (*kComponents) = count; diff --git a/samples/c/000028.jpg b/samples/c/cat.jpg similarity index 100% rename from samples/c/000028.jpg rename to samples/c/cat.jpg diff --git a/samples/c/latentsvmdetect.cpp b/samples/c/latentsvmdetect.cpp index 76c984045..b683d93e2 100644 --- a/samples/c/latentsvmdetect.cpp +++ b/samples/c/latentsvmdetect.cpp @@ -6,7 +6,7 @@ using namespace cv; const char* model_filename = "cat.xml"; -const char* image_filename = "000028.jpg"; +const char* image_filename = "cat.jpg"; void detect_and_draw_objects( IplImage* image, CvLatentSvmDetector* detector) { @@ -35,8 +35,26 @@ void detect_and_draw_objects( IplImage* image, CvLatentSvmDetector* detector) int main(int argc, char* argv[]) { + if (argc > 2) + { + image_filename = argv[1]; + model_filename = argv[2]; + } IplImage* image = cvLoadImage(image_filename); + if (!image) + { + printf( "Unable to load the image\n" + "Pass it as the first parameter: latentsvmdetect \n" ); + return -1; + } CvLatentSvmDetector* detector = cvLoadLatentSvmDetector(model_filename); + if (!detector) + { + printf( "Unable to load the model\n" + "Pass it as the second parameter: latentsvmdetect \n" ); + cvReleaseImage( &image ); + return -1; + } detect_and_draw_objects( image, detector ); cvNamedWindow( "test", 0 ); cvShowImage( "test", image );