From 982ccd784e1d19195190126d8bad7b3d7a1fc3b6 Mon Sep 17 00:00:00 2001 From: Daniel Angelov Date: Mon, 22 Jul 2013 13:49:33 +0300 Subject: [PATCH] Added the update on the sample. --- samples/cpp/lsd_lines.cpp | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/samples/cpp/lsd_lines.cpp b/samples/cpp/lsd_lines.cpp index 08807e6..3552f1c 100644 --- a/samples/cpp/lsd_lines.cpp +++ b/samples/cpp/lsd_lines.cpp @@ -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 ls = createLineSegmentDetectorPtr(LSD_REFINE_STD); +#else + Ptr ls = createLineSegmentDetectorPtr(LSD_REFINE_NONE); +#endif + double start = double(getTickCount()); vector 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 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); -- 2.7.4