From a8446fa1a15d9463d500ea59f395660875f4d4e3 Mon Sep 17 00:00:00 2001
From: even <philippe.even@loria.fr>
Date: Sun, 16 Dec 2018 12:34:17 +0100
Subject: [PATCH] Demo: input points

---
 Code/Seg/IPOLdemo/Input/points.txt |  3 ++
 Code/Seg/IPOLdemo/mainIPOL.cpp     | 75 ++++++++++++++++++++++++++----
 2 files changed, 70 insertions(+), 8 deletions(-)
 create mode 100644 Code/Seg/IPOLdemo/Input/points.txt

diff --git a/Code/Seg/IPOLdemo/Input/points.txt b/Code/Seg/IPOLdemo/Input/points.txt
new file mode 100644
index 0000000..83d4002
--- /dev/null
+++ b/Code/Seg/IPOLdemo/Input/points.txt
@@ -0,0 +1,3 @@
+121 149 140 114
+335 107 307 83
+-1
diff --git a/Code/Seg/IPOLdemo/mainIPOL.cpp b/Code/Seg/IPOLdemo/mainIPOL.cpp
index 013bdc6..e8f1bc6 100755
--- a/Code/Seg/IPOLdemo/mainIPOL.cpp
+++ b/Code/Seg/IPOLdemo/mainIPOL.cpp
@@ -27,15 +27,25 @@ int main (int argc, char *argv[])
 
   
   // getting parameters:
-  // - input file
+  // - input image file
   string input_filename = argv[1];
+  // - input points file
+  string inpoints_filename = "";
+  ifstream fin;  
+  bool with_points = false;
+  if (argc == 4)
+  {
+    inpoints_filename = argv[3];
+    fin.open (inpoints_filename.c_str(), std::fstream::in);
+    with_points = true;
+  }
   // - output file
   string output_filename = argv[2];
   ofstream fout;  
-  fout.open(output_filename.c_str(), std::fstream::out);
+  fout.open (output_filename.c_str(), std::fstream::out);
 
   
-// Calcul de la carte de gradient (utilise qt)
+  // Gradient map extraction (uses qt)
   QImage image;
   
   image.load (QString (input_filename.c_str()));
@@ -53,16 +63,65 @@ int main (int argc, char *argv[])
   }
   VMap *gMap = new VMap (width, height, tabImage, VMap::TYPE_SOBEL_5X5);
 
-  // Detection
+  // Input points reading (uses qt)
+  vector<Pt2i> pts;
+  if (with_points)
+  {
+    int val[4], i = 0;
+    bool reading = true;
+    if (fin)
+    {
+      while (reading)
+      {
+        fin >> val[i++];
+        if (val[i-1] == -1) reading = false;
+        // if (fin.eof ()) reading = false;
+        if (reading && i == 4)
+        {
+          pts.push_back (Pt2i (val[0], val[1]));
+          pts.push_back (Pt2i (val[2], val[3]));
+          i = 0;
+        }
+      }
+    }
+    fin.close();
+  }
+
+  // Blurred segment detection
+  vector<BlurredSegment *> bss;
   BSDetector detector;
   detector.setGradientMap (gMap);
-  detector.setMaxTrials (-1);
-  detector.detectAll ();
+  if (with_points)
+  {
+    vector<Pt2i>::iterator pit = pts.begin ();
+    int nbseg = 0;
+    while (pit != pts.end ())
+    {
+      Pt2i pt1 = *pit++;
+      Pt2i pt2 = *pit++;
+      std::cout << nbseg << " detect (" << pt1.x () << ", " << pt1.y ()
+                << ") (" << pt2.x () << ", " << pt2.y () << ")" << std::endl;
+      detector.detect (pt1, pt2);
+      BlurredSegment *mybs = detector.getBlurredSegment ();
+      if (mybs != NULL)
+      {
+        detector.preserveFormerBlurredSegment ();
+        bss.push_back (mybs);
+        nbseg ++;
+      }
+    }
+    std::cout << nbseg << " detections" << std::endl;
+  }
+  else
+  {
+    detector.setMaxTrials (-1);
+    detector.detectAll ();
+    bss = detector.getBlurredSegments ();
+  }
 
   fout << "# Line detection generated from " << argv[0] << "with format : X1 Y1 X2 Y2 on each line" << std::endl;
   
-  // Affichage
-  vector<BlurredSegment *> bss = detector.getBlurredSegments ();
+  // Display
   if (! bss.empty ())
   {
     vector<BlurredSegment *>::const_iterator it = bss.begin ();
-- 
GitLab