fixed sparse histogram update (ticket #526)
authorVadim Pisarevsky <no@email>
Wed, 10 Nov 2010 21:23:04 +0000 (21:23 +0000)
committerVadim Pisarevsky <no@email>
Wed, 10 Nov 2010 21:23:04 +0000 (21:23 +0000)
modules/imgproc/src/histogram.cpp

index 3da9d7c..a68f301 100644 (file)
@@ -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<uchar*> ptrs;
     vector<int> deltas;
@@ -783,11 +785,14 @@ static void calcHist( const Mat* images, int nimages, const int* channels,
         calcSparseHist_<float>(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;
         }
+    }
 }