diff --git a/modules/imgproc/src/histogram.cpp b/modules/imgproc/src/histogram.cpp index 3da9d7cb4..a68f301e9 100644 --- a/modules/imgproc/src/histogram.cpp +++ b/modules/imgproc/src/histogram.cpp @@ -754,17 +754,19 @@ static void calcHist( const Mat* images, int nimages, const int* channels, const Mat& mask, SparseMat& hist, int dims, const int* histSize, const float** ranges, bool uniform, bool accumulate, bool keepInt ) { - SparseMatIterator it; size_t i, N; if( !accumulate ) hist.create(dims, histSize, CV_32F); else + { + SparseMatIterator it = hist.begin(); for( i = 0, N = hist.nzcount(); i < N; i++, ++it ) { - int* value = (int*)it.ptr; - *value = cvRound(*(const float*)value); + Cv32suf* val = (Cv32suf*)it.ptr; + val->i = cvRound(val->f); } + } vector ptrs; vector deltas; @@ -783,11 +785,14 @@ static void calcHist( const Mat* images, int nimages, const int* channels, calcSparseHist_(ptrs, deltas, imsize, hist, dims, ranges, _uniranges, uniform ); if( !keepInt ) + { + SparseMatIterator it = hist.begin(); for( i = 0, N = hist.nzcount(); i < N; i++, ++it ) { - int* value = (int*)it.ptr; - *(float*)value = (float)*value; + Cv32suf* val = (Cv32suf*)it.ptr; + val->f = (float)val->i; } + } }