#include <iostream>
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:818
n-dimensional dense array class
Definition: mat.hpp:811
MatSize size
Definition: mat.hpp:2138
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:330
@ SOBEL
Definition: edge_drawing.hpp:28
Scalar_< double > Scalar
Definition: types.hpp:691
std::shared_ptr< _Tp > Ptr
Definition: cvstd_wrapper.hpp:23
int64_t int64
Definition: interface.h:61
#define CV_8UC3
Definition: interface.h:90
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:71
CV_EXPORTS_W Mat imread(const String &filename, int flags=IMREAD_COLOR)
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:861
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.
GOpaque< Size > size(const GMat &src)
Gets dimensions from Mat.
Definition: ximgproc.hpp:124
"black box" representation of the file storage associated with a file on disk.
Definition: core.hpp:106