#include <iostream>
using namespace std;
int main(
int argc,
char** argv)
{
string in;
CommandLineParser parser(argc, argv,
"{@input|corridor.jpg|input image}{help h||show help message}");
if (parser.has("help"))
{
parser.printMessage();
return 0;
}
{
return -1;
}
int length_threshold = 10;
float distance_threshold = 1.41421356f;
double canny_th1 = 50.0;
double canny_th2 = 50.0;
int canny_aperture_size = 3;
bool do_merge = false;
distance_threshold, canny_th1, canny_th2, canny_aperture_size,
do_merge);
vector<Vec4f> lines;
for (int run_count = 0; run_count < 5; run_count++) {
lines.clear();
fld->detect(image, lines);
double duration_ms = double(
getTickCount() - start) * 1000 / freq;
cout << "Elapsed time for FLD " << duration_ms << " ms." << endl;
}
Mat line_image_fld(image);
fld->drawSegments(line_image_fld, lines);
imshow(
"FLD result", line_image_fld);
ed->params.GradientThresholdValue = 38;
ed->params.AnchorThresholdValue = 8;
vector<Vec6d> ellipses;
for (int run_count = 0; run_count < 5; run_count++) {
lines.clear();
ed->detectEdges(image);
ed->detectLines(lines);
double duration_ms = double(
getTickCount() - start) * 1000 / freq;
cout << "Elapsed time for EdgeDrawing detectLines " << duration_ms << " ms." << endl;
ed->detectEllipses(ellipses);
cout << "Elapsed time for EdgeDrawing detectEllipses " << duration_ms << " ms." << endl;
}
vector<vector<Point> > segments = ed->getSegments();
for (size_t i = 0; i < segments.size(); i++)
{
const Point* pts = &segments[i][0];
int n = (int)segments[i].size();
polylines(edge_image_ed, &pts, &n, 1,
false,
Scalar((rand() & 255), (rand() & 255), (rand() & 255)), 1);
}
imshow(
"EdgeDrawing detected edges", edge_image_ed);
Mat line_image_ed(image);
fld->drawSegments(line_image_ed, lines);
for (size_t i = 0; i < ellipses.size(); i++)
{
Point center((
int)ellipses[i][0], (
int)ellipses[i][1]);
Size axes((
int)ellipses[i][2] + (
int)ellipses[i][3], (
int)ellipses[i][2] + (
int)ellipses[i][4]);
double angle(ellipses[i][5]);
ellipse(line_image_ed, center, axes, angle, 0, 360, color, 2,
LINE_AA);
}
imshow(
"EdgeDrawing result", line_image_ed);
return 0;
}
Designed for command line parsing.
Definition utility.hpp:890
n-dimensional dense array class
Definition mat.hpp:950
MatSize size
Definition mat.hpp:2447
static CV_NODISCARD_STD MatExpr zeros(int rows, int cols, int type)
Returns a zero array of the specified size and type.
bool empty() const
Returns true if the array has no elements.
Template class for specifying the size of an image or rectangle.
Definition types.hpp:338
@ SOBEL
Definition edge_drawing.hpp:28
Scalar_< double > Scalar
Definition types.hpp:712
std::shared_ptr< _Tp > Ptr
Definition cvstd_wrapper.hpp:23
int64_t int64
Definition interface.h:61
#define CV_8UC3
Definition interface.h:101
cv::String findFile(const cv::String &relative_path, bool required=true, bool silentMode=false)
Try to find requested data file.
double getTickFrequency()
Returns the number of ticks per second.
int64 getTickCount()
Returns the number of ticks.
void imshow(const String &winname, InputArray mat)
Displays an image in the specified window.
int waitKey(int delay=0)
Waits for a pressed key.
@ IMREAD_GRAYSCALE
If set, always convert image to the single channel grayscale image (codec internal conversion).
Definition imgcodecs.hpp:70
CV_EXPORTS_W Mat imread(const String &filename, int flags=IMREAD_COLOR_BGR)
Loads an image from a file.
void ellipse(InputOutputArray img, Point center, Size axes, double angle, double startAngle, double endAngle, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
Draws a simple or thick elliptic arc or fills an ellipse sector.
void polylines(InputOutputArray img, InputArrayOfArrays pts, bool isClosed, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
Draws several polygonal curves.
@ LINE_AA
antialiased line
Definition imgproc.hpp:897
Ptr< EdgeDrawing > createEdgeDrawing()
Creates a smart pointer to a EdgeDrawing object and initializes it.
Ptr< FastLineDetector > createFastLineDetector(int length_threshold=10, float distance_threshold=1.414213562f, double canny_th1=50.0, double canny_th2=50.0, int canny_aperture_size=3, bool do_merge=false)
Creates a smart pointer to a FastLineDetector object and initializes it.
int main(int argc, char *argv[])
Definition highgui_qt.cpp:3
Definition ximgproc.hpp:125