fixed fail in arithmetic test
authorVadim Pisarevsky <vadim.pisarevsky@itseez.com>
Mon, 24 Sep 2012 12:14:19 +0000 (16:14 +0400)
committerVadim Pisarevsky <vadim.pisarevsky@itseez.com>
Mon, 24 Sep 2012 12:14:19 +0000 (16:14 +0400)
modules/core/src/arithm.cpp

index 9add4c3..aa816e8 100644 (file)
@@ -1218,18 +1218,23 @@ namespace cv
 
 static int actualScalarDepth(const Mat& src)
 {
-    double min = MIN(MIN(*((double*)src.data), *((double*)src.data+1)), MIN(*((double*)src.data+2), (*((double*)src.data+3))));
-    double max = MAX(MAX(*((double*)src.data), *((double*)src.data+1)), MAX(*((double*)src.data+2), (*((double*)src.data+3))));
+    const double* data = (const double*)src.data;
+    double minval = MIN(data[0], data[1]);
+    minval = MIN(minval, data[2]);
+    minval = MIN(minval, data[3]);
+    double maxval = MAX(data[0], data[1]);
+    maxval = MAX(maxval, data[2]);
+    maxval = MAX(maxval, data[3]);
     int depth = CV_64F;
-    if(min >= 0 && max <= UCHAR_MAX)
+    if(minval >= 0 && maxval <= UCHAR_MAX)
         depth = CV_8U;
-    else if(min >= SCHAR_MIN && max <= SCHAR_MAX)
+    else if(minval >= SCHAR_MIN && maxval <= SCHAR_MAX)
         depth = CV_8S;
-    else if(min >= 0 && max <= USHRT_MAX)
+    else if(minval >= 0 && maxval <= USHRT_MAX)
         depth = CV_16U;
-    else if(min >= SHRT_MIN && max <= SHRT_MAX)
+    else if(minval >= SHRT_MIN && maxval <= SHRT_MAX)
         depth = CV_16S;
-    else if(min >= INT_MIN && max <= INT_MAX)
+    else if(minval >= INT_MIN && maxval <= INT_MAX)
         depth = CV_32S;
     return depth;
 }
@@ -1269,7 +1274,7 @@ static void arithm_op(InputArray _src1, InputArray _src2, OutputArray _dst,
                      "The operation is neither 'array op array' (where arrays have the same size and the same number of channels), "
                      "nor 'array op scalar', nor 'scalar op array'" );
         haveScalar = true;
-        CV_Assert(src2.type() == CV_64F && src2.rows == 4);
+        CV_Assert(src2.type() == CV_64F && (src2.rows == 4 || src2.rows == 1));
         depth2 = actualScalarDepth(src2);
     }