opencv/samples/cpp/lsd_lines.cpp

54 lines
1.3 KiB
C++
Raw Normal View History

#include <iostream>
2016-02-15 21:37:29 +08:00
#include "opencv2/imgproc.hpp"
2014-07-04 22:48:15 +08:00
#include "opencv2/imgcodecs.hpp"
2016-02-15 21:37:29 +08:00
#include "opencv2/highgui.hpp"
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
2013-07-22 18:49:33 +08:00
std::string in;
2015-08-01 23:24:23 +08:00
cv::CommandLineParser parser(argc, argv, "{@input|../data/building.jpg|input image}{help h||show help message}");
if (parser.has("help"))
{
2015-08-01 23:24:23 +08:00
parser.printMessage();
return 0;
}
2015-08-01 23:24:23 +08:00
in = parser.get<string>("@input");
Mat image = imread(in, IMREAD_GRAYSCALE);
2016-02-15 21:37:29 +08:00
if( image.empty() )
{ return -1; }
2013-07-22 18:49:33 +08:00
#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 = createLineSegmentDetector(LSD_REFINE_STD);
2013-07-22 18:49:33 +08:00
#else
Ptr<LineSegmentDetector> ls = createLineSegmentDetector(LSD_REFINE_NONE);
2013-07-22 18:49:33 +08:00
#endif
double start = double(getTickCount());
vector<Vec4f> lines_std;
2013-07-22 18:49:33 +08:00
// Detect the lines
ls->detect(image, lines_std);
2013-07-22 18:49:33 +08:00
double duration_ms = (double(getTickCount()) - start) * 1000 / getTickFrequency();
std::cout << "It took " << duration_ms << " ms." << std::endl;
2013-07-22 18:49:33 +08:00
// Show found lines
Mat drawnLines(image);
ls->drawSegments(drawnLines, lines_std);
imshow("Standard refinement", drawnLines);
waitKey();
return 0;
}