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