From 79ca6d8995723e73a9721817ce84f5854890f15d Mon Sep 17 00:00:00 2001 From: Vadim Pisarevsky Date: Wed, 10 Nov 2010 21:23:04 +0000 Subject: [PATCH] fixed sparse histogram update (ticket #526) --- modules/imgproc/src/histogram.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) 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; } + } }