Do not compute gains when no images overlap
authorQuentin Chateau <quentin.chateau@gmail.com>
Sat, 5 Jan 2019 15:39:09 +0000 (16:39 +0100)
committerQuentin Chateau <quentin.chateau@gmail.com>
Sat, 5 Jan 2019 15:39:09 +0000 (16:39 +0100)
modules/stitching/src/exposure_compensate.cpp

index e77a6ae..c204af2 100644 (file)
@@ -201,6 +201,12 @@ void GainCompensator::singleFeed(const std::vector<Point> &corners, const std::v
         double alpha = 0.01;
         double beta = 100;
         int num_eq = num_images - countNonZero(skip);
+        gains_.create(num_images, 1);
+        gains_.setTo(1);
+
+        // No image process, gains are all set to one, stop here
+        if (num_eq == 0)
+            return;
 
         Mat_<double> A(num_eq, num_eq); A.setTo(0);
         Mat_<double> b(num_eq, 1); b.setTo(0);
@@ -248,12 +254,10 @@ void GainCompensator::singleFeed(const std::vector<Point> &corners, const std::v
 #endif
         CV_CheckTypeEQ(l_gains.type(), CV_64FC1, "");
 
-        gains_.create(num_images, 1);
         for (int i = 0, j = 0; i < num_images; ++i)
         {
-            if (skip(i, 0))
-                gains_.at<double>(i, 0) = 1;
-            else
+            // Only assign non-skipped gains. Other gains are already set to 1
+            if (!skip(i, 0))
                 gains_.at<double>(i, 0) = l_gains(j++, 0);
         }
     }