Commit 17dc1e13 authored by Vadim Pisarevsky's avatar Vadim Pisarevsky

added 16u support in calcHist & calcBackProject; added image type checks (ticket #856)

parent 24ccbccf
...@@ -613,10 +613,15 @@ void calcHist( const Mat* images, int nimages, const int* channels, ...@@ -613,10 +613,15 @@ void calcHist( const Mat* images, int nimages, const int* channels,
const double* _uniranges = uniform ? &uniranges[0] : 0; const double* _uniranges = uniform ? &uniranges[0] : 0;
int depth = images[0].depth(); int depth = images[0].depth();
if( depth == CV_8U ) if( depth == CV_8U )
calcHist_8u(ptrs, deltas, imsize, ihist, dims, ranges, _uniranges, uniform ); calcHist_8u(ptrs, deltas, imsize, ihist, dims, ranges, _uniranges, uniform );
else if( depth == CV_16U )
calcHist_<ushort>(ptrs, deltas, imsize, ihist, dims, ranges, _uniranges, uniform );
else if( depth == CV_32F ) else if( depth == CV_32F )
calcHist_<float>(ptrs, deltas, imsize, ihist, dims, ranges, _uniranges, uniform ); calcHist_<float>(ptrs, deltas, imsize, ihist, dims, ranges, _uniranges, uniform );
else
CV_Error(CV_StsUnsupportedFormat, "");
ihist.convertTo(hist, CV_32F); ihist.convertTo(hist, CV_32F);
} }
...@@ -780,8 +785,12 @@ static void calcHist( const Mat* images, int nimages, const int* channels, ...@@ -780,8 +785,12 @@ static void calcHist( const Mat* images, int nimages, const int* channels,
int depth = images[0].depth(); int depth = images[0].depth();
if( depth == CV_8U ) if( depth == CV_8U )
calcSparseHist_8u(ptrs, deltas, imsize, hist, dims, ranges, _uniranges, uniform ); calcSparseHist_8u(ptrs, deltas, imsize, hist, dims, ranges, _uniranges, uniform );
else if( depth == CV_16U )
calcSparseHist_<ushort>(ptrs, deltas, imsize, hist, dims, ranges, _uniranges, uniform );
else if( depth == CV_32F ) else if( depth == CV_32F )
calcSparseHist_<float>(ptrs, deltas, imsize, hist, dims, ranges, _uniranges, uniform ); calcSparseHist_<float>(ptrs, deltas, imsize, hist, dims, ranges, _uniranges, uniform );
else
CV_Error(CV_StsUnsupportedFormat, "");
if( !keepInt ) if( !keepInt )
{ {
...@@ -1114,8 +1123,12 @@ void calcBackProject( const Mat* images, int nimages, const int* channels, ...@@ -1114,8 +1123,12 @@ void calcBackProject( const Mat* images, int nimages, const int* channels,
int depth = images[0].depth(); int depth = images[0].depth();
if( depth == CV_8U ) if( depth == CV_8U )
calcBackProj_8u(ptrs, deltas, imsize, hist, dims, ranges, _uniranges, (float)scale, uniform); calcBackProj_8u(ptrs, deltas, imsize, hist, dims, ranges, _uniranges, (float)scale, uniform);
else if( depth == CV_16U )
calcBackProj_<ushort, ushort>(ptrs, deltas, imsize, hist, dims, ranges, _uniranges, (float)scale, uniform );
else if( depth == CV_32F ) else if( depth == CV_32F )
calcBackProj_<float, float>(ptrs, deltas, imsize, hist, dims, ranges, _uniranges, (float)scale, uniform ); calcBackProj_<float, float>(ptrs, deltas, imsize, hist, dims, ranges, _uniranges, (float)scale, uniform );
else
CV_Error(CV_StsUnsupportedFormat, "");
} }
...@@ -1269,9 +1282,14 @@ void calcBackProject( const Mat* images, int nimages, const int* channels, ...@@ -1269,9 +1282,14 @@ void calcBackProject( const Mat* images, int nimages, const int* channels,
if( depth == CV_8U ) if( depth == CV_8U )
calcSparseBackProj_8u(ptrs, deltas, imsize, hist, dims, ranges, calcSparseBackProj_8u(ptrs, deltas, imsize, hist, dims, ranges,
_uniranges, (float)scale, uniform); _uniranges, (float)scale, uniform);
else if( depth == CV_16U )
calcSparseBackProj_<ushort, ushort>(ptrs, deltas, imsize, hist, dims, ranges,
_uniranges, (float)scale, uniform );
else if( depth == CV_32F ) else if( depth == CV_32F )
calcSparseBackProj_<float, float>(ptrs, deltas, imsize, hist, dims, ranges, calcSparseBackProj_<float, float>(ptrs, deltas, imsize, hist, dims, ranges,
_uniranges, (float)scale, uniform ); _uniranges, (float)scale, uniform );
else
CV_Error(CV_StsUnsupportedFormat, "");
} }
......
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