Commit d33d37ff authored by Tetragramm's avatar Tetragramm

Add check for all zero moments. If one of the shapes is empty, the match would…

Add check for all zero moments. If one of the shapes is empty, the match would return zero distance between the shapes even when the other one had content. It now returns DBL_MAX if no moments had value.
parent 9be63046
......@@ -50,6 +50,7 @@ double cv::matchShapes(InputArray contour1, InputArray contour2, int method, dou
double eps = 1.e-5;
double mmm;
double result = 0;
bool anyResults = false;
HuMoments( moments(contour1), ma );
HuMoments( moments(contour2), mb );
......@@ -80,6 +81,7 @@ double cv::matchShapes(InputArray contour1, InputArray contour2, int method, dou
ama = 1. / (sma * log10( ama ));
amb = 1. / (smb * log10( amb ));
result += fabs( -ama + amb );
anyResults = true;
}
}
break;
......@@ -108,6 +110,7 @@ double cv::matchShapes(InputArray contour1, InputArray contour2, int method, dou
ama = sma * log10( ama );
amb = smb * log10( amb );
result += fabs( -ama + amb );
anyResults = true;
}
}
break;
......@@ -138,6 +141,7 @@ double cv::matchShapes(InputArray contour1, InputArray contour2, int method, dou
mmm = fabs( (ama - amb) / ama );
if( result < mmm )
result = mmm;
anyResults = true;
}
}
break;
......@@ -145,6 +149,9 @@ double cv::matchShapes(InputArray contour1, InputArray contour2, int method, dou
CV_Error( CV_StsBadArg, "Unknown comparison method" );
}
if (!anyResults)
result = DBL_MAX;
return result;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment