Skip to content

Commit

Permalink
Merge pull request #3159 from sturkmen72:edge_drawing
Browse files Browse the repository at this point in the history
  • Loading branch information
alalek committed Jan 28, 2022
2 parents b0ab32e + 081bebd commit fcd5c7d
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 17 deletions.
58 changes: 41 additions & 17 deletions modules/ximgproc/include/opencv2/ximgproc/edge_drawing.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,69 +25,93 @@ class CV_EXPORTS_W EdgeDrawing : public Algorithm
enum GradientOperator
{
PREWITT = 0,
SOBEL = 1,
SCHARR = 2,
LSD = 3
SOBEL = 1,
SCHARR = 2,
LSD = 3
};

struct CV_EXPORTS_W_SIMPLE Params
{
CV_WRAP Params();
//! Parameter Free mode will be activated when this value is true.
//! Parameter Free mode will be activated when this value is set as true. Default value is false.
CV_PROP_RW bool PFmode;
//! indicates the operator used for gradient calculation.The following operation flags are available(cv::ximgproc::EdgeDrawing::GradientOperator)
/** @brief indicates the operator used for gradient calculation.
one of the flags cv::ximgproc::EdgeDrawing::GradientOperator. Default value is PREWITT
*/
CV_PROP_RW int EdgeDetectionOperator;
//! threshold value used to create gradient image.
//! threshold value of gradiential difference between pixels. Used to create gradient image. Default value is 20
CV_PROP_RW int GradientThresholdValue;
//! threshold value used to create gradient image.
//! threshold value used to select anchor points. Default value is 0
CV_PROP_RW int AnchorThresholdValue;
//! Default value is 1
CV_PROP_RW int ScanInterval;
//! minimun connected pixels length processed to create an edge segment.
/** @brief minimun connected pixels length processed to create an edge segment.
in gradient image, minimum connected pixels length processed to create an edge segment. pixels having upper value than GradientThresholdValue
will be processed. Default value is 10
*/
CV_PROP_RW int MinPathLength;
//! sigma value for internal GaussianBlur() function.
//! sigma value for internal GaussianBlur() function. Default value is 1.0
CV_PROP_RW float Sigma;
CV_PROP_RW bool SumFlag;
//! when this value is true NFA (Number of False Alarms) algorithm will be used for line and ellipse validation.
//! Default value is true. indicates if NFA (Number of False Alarms) algorithm will be used for line and ellipse validation.
CV_PROP_RW bool NFAValidation;
//! minimun line length to detect.
CV_PROP_RW int MinLineLength;
//! Default value is 6.0
CV_PROP_RW double MaxDistanceBetweenTwoLines;
//! Default value is 1.0
CV_PROP_RW double LineFitErrorThreshold;
//! Default value is 1.3
CV_PROP_RW double MaxErrorThreshold;

void read(const FileNode& fn);
void write(FileStorage& fs) const;
};

/** @brief Detects edges and prepares them to detect lines and ellipses.
/** @brief Detects edges in a grayscale image and prepares them to detect lines and ellipses.
@param src input image
@param src 8-bit, single-channel, grayscale input image.
*/
CV_WRAP virtual void detectEdges(InputArray src) = 0;

/** @brief returns Edge Image prepared by detectEdges() function.
@param dst returns 8-bit, single-channel output image.
*/
CV_WRAP virtual void getEdgeImage(OutputArray dst) = 0;

/** @brief returns Gradient Image prepared by detectEdges() function.
@param dst returns 16-bit, single-channel output image.
*/
CV_WRAP virtual void getGradientImage(OutputArray dst) = 0;

/** @brief returns Edge Segments prepared by detectEdges() function.
*/
CV_WRAP virtual std::vector<std::vector<Point> > getSegments() = 0;

/** @brief Detects lines.
@param lines output Vec<4f> contains start point and end point of detected lines.
@note you should call detectEdges() method before call this.
@param lines output Vec<4f> contains the start point and the end point of detected lines.
@note you should call detectEdges() before calling this function.
*/
CV_WRAP virtual void detectLines(OutputArray lines) = 0;

/** @brief Detects circles and ellipses.
@param ellipses output Vec<6d> contains center point and perimeter for circles.
@note you should call detectEdges() method before call this.
@param ellipses output Vec<6d> contains center point and perimeter for circles, center point, axes and angle for ellipses.
@note you should call detectEdges() before calling this function.
*/
CV_WRAP virtual void detectEllipses(OutputArray ellipses) = 0;

CV_WRAP Params params;

/** @brief sets parameters.
this function is meant to be used for parameter setting in other languages than c++.
this function is meant to be used for parameter setting in other languages than c++ like python.
@param parameters
*/
CV_WRAP void setParams(const EdgeDrawing::Params& parameters);
virtual ~EdgeDrawing() { }
Expand Down
7 changes: 7 additions & 0 deletions modules/ximgproc/src/edge_drawing.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ class EdgeDrawingImpl : public EdgeDrawing
void detectLines(OutputArray lines) CV_OVERRIDE;
void detectEllipses(OutputArray ellipses) CV_OVERRIDE;

virtual String getDefaultName() const CV_OVERRIDE;
virtual void read(const FileNode& fn) CV_OVERRIDE;
virtual void write(FileStorage& fs) const CV_OVERRIDE;

Expand Down Expand Up @@ -315,6 +316,11 @@ void EdgeDrawing::Params::write(cv::FileStorage& fs) const
fs << "MaxErrorThreshold" << MaxErrorThreshold;
}

String EdgeDrawingImpl::getDefaultName() const
{
return String("EdgeDrawing");
}

void EdgeDrawingImpl::read(const cv::FileNode& fn)
{
params.read(fn);
Expand Down Expand Up @@ -343,6 +349,7 @@ EdgeDrawingImpl::~EdgeDrawingImpl()

void EdgeDrawingImpl::detectEdges(InputArray src)
{
CV_Assert(!src.empty() && src.type() == CV_8UC1);
gradThresh = params.GradientThresholdValue;
anchorThresh = params.AnchorThresholdValue;
op = params.EdgeDetectionOperator;
Expand Down

0 comments on commit fcd5c7d

Please sign in to comment.