Added the update on the sample.
authorDaniel Angelov <dani_angelov@yahoo.com>
Mon, 22 Jul 2013 10:49:33 +0000 (13:49 +0300)
committerDaniel Angelov <dani_angelov@yahoo.com>
Mon, 22 Jul 2013 10:49:33 +0000 (13:49 +0300)
samples/cpp/lsd_lines.cpp

index 08807e6..3552f1c 100644 (file)
@@ -11,37 +11,40 @@ using namespace cv;
 
 int main(int argc, char** argv)
 {
+    std::string in;
     if (argc != 2)
     {
-        std::cout << "lsd_lines [input image]" << std::endl;
-        return false;
+        std::cout << "Usage: lsd_lines [input image]. Now loading building.jpg" << std::endl;
+        in = "building.jpg";
+    }
+    else
+    {
+        in = argv[1];
     }
-
-    std::string in = argv[1];
 
     Mat image = imread(in, IMREAD_GRAYSCALE);
 
-    // Create and LSD detector with std refinement.
-    LineSegmentDetector* lsd_std = createLineSegmentDetectorPtr(LSD_REFINE_STD);
+#if 0
+    Canny(image, image, 50, 200, 3); // Apply canny edge
+#endif
+
+    // Create and LSD detector with standard or no refinement.
+#if 1
+    Ptr<LineSegmentDetector> ls = createLineSegmentDetectorPtr(LSD_REFINE_STD);
+#else
+    Ptr<LineSegmentDetector> ls = createLineSegmentDetectorPtr(LSD_REFINE_NONE);
+#endif
+
     double start = double(getTickCount());
     vector<Vec4i> lines_std;
-    lsd_std->detect(image, lines_std);
-    double duration_ms = (double(getTickCount()) - start) * 1000 / getTickFrequency();
-    std::cout << "OpenCV STD (blue) - " << duration_ms << " ms." << std::endl;
 
-    // Create an LSD detector with no refinement applied.
-    LineSegmentDetector* lsd_none = createLineSegmentDetectorPtr(LSD_REFINE_NONE);
-    start = double(getTickCount());
-    vector<Vec4i> lines_none;
-    lsd_none->detect(image, lines_none);
-    duration_ms = (double(getTickCount()) - start) * 1000 / getTickFrequency();
-    std::cout << "OpenCV NONE (red)- " << duration_ms << " ms." << std::endl;
-    std::cout << "Overlapping pixels are shown in purple." << std::endl;
+    // Detect the lines
+    ls->detect(image, lines_std);
 
-    Mat difference = Mat::zeros(image.size(), CV_8UC1);
-    lsd_none->compareSegments(image.size(), lines_std, lines_none, &difference);
-    imshow("Line difference", difference);
+    double duration_ms = (double(getTickCount()) - start) * 1000 / getTickFrequency();
+    std::cout << "It took " << duration_ms << " ms." << std::endl;
 
+    // Show found lines
     Mat drawnLines(image);
     lsd_none->drawSegments(drawnLines, lines_std);
     imshow("Standard refinement", drawnLines);