1
0
Fork 0
mirror of https://github.com/ruby-opencv/ruby-opencv synced 2023-03-27 23:22:12 -04:00

added error handlings to CvConDensation

This commit is contained in:
ser1zw 2011-08-12 15:51:05 +09:00
parent 14659f0f90
commit 52b2b918e5

View file

@ -83,7 +83,14 @@ VALUE
rb_dynamic_matrix(VALUE self) rb_dynamic_matrix(VALUE self)
{ {
CvConDensation *cd = CVCONDENSATION(self); CvConDensation *cd = CVCONDENSATION(self);
return DEPEND_OBJECT(cCvMat::rb_class(), cvInitMatHeader(ALLOC(CvMat), cd->DP, cd->DP, CV_MAKETYPE(CV_32F, 1), cd->DynamMatr), self); CvMat* mat = NULL;
try {
mat = cvInitMatHeader(ALLOC(CvMat), cd->DP, cd->DP, CV_MAKETYPE(CV_32F, 1), cd->DynamMatr);
}
catch (cv::Exception& e) {
raise_cverror(e);
}
return DEPEND_OBJECT(cCvMat::rb_class(), mat, self);
} }
/* /*
@ -96,7 +103,14 @@ VALUE
rb_confidence(VALUE self) rb_confidence(VALUE self)
{ {
CvConDensation *cd = CVCONDENSATION(self); CvConDensation *cd = CVCONDENSATION(self);
return DEPEND_OBJECT(cCvMat::rb_class(), cvInitMatHeader(ALLOC(CvMat), cd->SamplesNum, 1, CV_MAKETYPE(CV_32F, 1), cd->flConfidence), self); CvMat* mat = NULL;
try {
mat = cvInitMatHeader(ALLOC(CvMat), cd->SamplesNum, 1, CV_MAKETYPE(CV_32F, 1), cd->flConfidence);
}
catch (cv::Exception& e) {
raise_cverror(e);
}
return DEPEND_OBJECT(cCvMat::rb_class(), mat, self);
} }
/* /*
@ -109,7 +123,14 @@ VALUE
rb_cumulative(VALUE self) rb_cumulative(VALUE self)
{ {
CvConDensation *cd = CVCONDENSATION(self); CvConDensation *cd = CVCONDENSATION(self);
return DEPEND_OBJECT(cCvMat::rb_class(), cvInitMatHeader(ALLOC(CvMat), cd->SamplesNum, 1, CV_MAKETYPE(CV_32F, 1), cd->flCumulative), self); CvMat* mat = NULL;
try {
mat = cvInitMatHeader(ALLOC(CvMat), cd->SamplesNum, 1, CV_MAKETYPE(CV_32F, 1), cd->flCumulative);
}
catch (cv::Exception& e) {
raise_cverror(e);
}
return DEPEND_OBJECT(cCvMat::rb_class(), mat, self);
} }
/* /*
@ -122,7 +143,14 @@ VALUE
rb_state(VALUE self) rb_state(VALUE self)
{ {
CvConDensation *cd = CVCONDENSATION(self); CvConDensation *cd = CVCONDENSATION(self);
return DEPEND_OBJECT(cCvMat::rb_class(), cvInitMatHeader(ALLOC(CvMat), cd->DP, 1, CV_MAKETYPE(CV_32F, 1), cd->State), self); CvMat* mat = NULL;
try {
mat = cvInitMatHeader(ALLOC(CvMat), cd->DP, 1, CV_MAKETYPE(CV_32F, 1), cd->State);
}
catch (cv::Exception& e) {
raise_cverror(e);
}
return DEPEND_OBJECT(cCvMat::rb_class(), mat, self);
} }
/* /*
@ -148,30 +176,37 @@ VALUE
rb_init_sample_set(VALUE self, VALUE lower, VALUE upper) rb_init_sample_set(VALUE self, VALUE lower, VALUE upper)
{ {
CvConDensation *cd = CVCONDENSATION(self); CvConDensation *cd = CVCONDENSATION(self);
CvMat *lower_bound = CVMAT(lower), *upper_bound = CVMAT(upper), lb_stub, ub_stub; CvMat *lower_bound = CVMAT_WITH_CHECK(lower), *upper_bound = CVMAT_WITH_CHECK(upper), lb_stub, ub_stub;
int lower_type = lower_bound->type, upper_type = lower_bound->type; int lower_type = lower_bound->type, upper_type = lower_bound->type;
if (lower_type != CV_32FC1 || lower_bound->cols != 1) { try {
if (CV_MAT_DEPTH(lower_type) == CV_32F) { if (lower_type != CV_32FC1 || lower_bound->cols != 1) {
lower_bound = cvReshape(lower_bound, &lb_stub, 1, lower_bound->rows * lower_bound->cols); if (CV_MAT_DEPTH(lower_type) == CV_32F) {
} else { lower_bound = cvReshape(lower_bound, &lb_stub, 1, lower_bound->rows * lower_bound->cols);
lower = cCvMat::new_object(cvSize(lower_bound->rows * lower_bound->cols, 1), CV_MAKETYPE(CV_32S, 1)); }
cvConvertScale(lower_bound, CVARR(lower)); else {
lower_bound = CVMAT(lower); lower = cCvMat::new_object(cvSize(lower_bound->rows * lower_bound->cols, 1), CV_MAKETYPE(CV_32S, 1));
cvConvertScale(lower_bound, CVARR(lower));
lower_bound = CVMAT(lower);
}
} }
} if (upper_type != CV_32FC1 || upper_bound->cols != 1) {
if (upper_type != CV_32FC1 || upper_bound->cols != 1) { if (CV_MAT_DEPTH(upper_type) == CV_32F) {
if (CV_MAT_DEPTH(upper_type) == CV_32F) { upper_bound = cvReshape(upper_bound, &ub_stub, 1, upper_bound->rows * upper_bound->cols);
upper_bound = cvReshape(upper_bound, &ub_stub, 1, upper_bound->rows * upper_bound->cols); }
} else { else {
upper = cCvMat::new_object(cvSize(upper_bound->rows * upper_bound->cols, 1), CV_MAKETYPE(CV_32F, 1)); upper = cCvMat::new_object(cvSize(upper_bound->rows * upper_bound->cols, 1), CV_MAKETYPE(CV_32F, 1));
cvConvertScale(upper_bound, CVARR(upper)); cvConvertScale(upper_bound, CVARR(upper));
upper_bound = CVMAT(upper); upper_bound = CVMAT(upper);
}
} }
if (lower_bound->rows != cd->DP || upper_bound->rows != cd->DP) {
rb_raise(rb_eTypeError, "sample matrix step unmatch.");
}
cvConDensInitSampleSet(cd, lower_bound, upper_bound);
} }
if (lower_bound->rows != cd->DP || upper_bound->rows != cd->DP) { catch (cv::Exception& e) {
rb_raise(rb_eTypeError, "sample matrix step unmatch."); raise_cverror(e);
} }
cvConDensInitSampleSet(cd, lower_bound, upper_bound);
return self; return self;
} }
@ -184,7 +219,12 @@ rb_init_sample_set(VALUE self, VALUE lower, VALUE upper)
VALUE VALUE
rb_update_by_time(VALUE self) rb_update_by_time(VALUE self)
{ {
cvConDensUpdateByTime(CVCONDENSATION(self)); try {
cvConDensUpdateByTime(CVCONDENSATION(self));
}
catch (cv::Exception& e) {
raise_cverror(e);
}
return self; return self;
} }
@ -199,9 +239,15 @@ rb_each_sample(VALUE self)
{ {
CvConDensation *cd = CVCONDENSATION(self); CvConDensation *cd = CVCONDENSATION(self);
if (rb_block_given_p()) { if (rb_block_given_p()) {
for (int i = 0; i < cd->SamplesNum; i++) { try {
rb_yield(DEPEND_OBJECT(cCvMat::rb_class(), cvInitMatHeader(ALLOC(CvMat), cd->DP, 1, CV_MAKETYPE(CV_32F, 1), cd->flSamples[i]), self)); for (int i = 0; i < cd->SamplesNum; ++i) {
CvMat* mat = cvInitMatHeader(ALLOC(CvMat), cd->DP, 1, CV_MAKETYPE(CV_32F, 1), cd->flSamples[i]);
rb_yield(DEPEND_OBJECT(cCvMat::rb_class(), mat, self));
} }
}
catch (cv::Exception& e) {
raise_cverror(e);
}
} }
return self; return self;
} }
@ -218,9 +264,15 @@ rb_calculate_confidence(VALUE self)
VALUE value; VALUE value;
CvConDensation *cd = CVCONDENSATION(self); CvConDensation *cd = CVCONDENSATION(self);
if (rb_block_given_p()) { if (rb_block_given_p()) {
for (int i = 0; i < cd->SamplesNum; i++) { try {
value = rb_yield(DEPEND_OBJECT(cCvMat::rb_class(), cvInitMatHeader(ALLOC(CvMat), cd->DP, 1, CV_MAKETYPE(CV_32F, 1), cd->flSamples[i]), self)); for (int i = 0; i < cd->SamplesNum; ++i) {
cd->flConfidence[i] = NUM2DBL(value); CvMat* mat = cvInitMatHeader(ALLOC(CvMat), cd->DP, 1, CV_MAKETYPE(CV_32F, 1), cd->flSamples[i]);
value = rb_yield(DEPEND_OBJECT(cCvMat::rb_class(), mat, self));
cd->flConfidence[i] = NUM2DBL(value);
}
}
catch (cv::Exception& e) {
raise_cverror(e);
} }
} }
return self; return self;