mexopencv  3.4.1
MEX interface for OpenCV library
approxPolyDP.cpp
Go to the documentation of this file.
1 
8 #include "mexopencv.hpp"
9 #include "opencv2/imgproc.hpp"
10 using namespace std;
11 using namespace cv;
12 
20 void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
21 {
22  // Check the number of arguments
23  nargchk(nrhs>=1 && (nrhs%2)==1 && nlhs<=1);
24 
25  // Argument vector
26  vector<MxArray> rhs(prhs, prhs+nrhs);
27 
28  // Option processing
29  double epsilon = 2.0;
30  bool closed = true;
31  for (int i=1; i<nrhs; i+=2) {
32  string key(rhs[i].toString());
33  if (key == "Epsilon")
34  epsilon = rhs[i+1].toDouble();
35  else if (key == "Closed")
36  closed = rhs[i+1].toBool();
37  else
38  mexErrMsgIdAndTxt("mexopencv:error",
39  "Unrecognized option %s", key.c_str());
40  }
41 
42  // Process
43  if (rhs[0].isNumeric()) {
44  Mat curve(rhs[0].toMat(rhs[0].isInt32() ? CV_32S : CV_32F)),
45  approxCurve;
46  approxPolyDP(curve, approxCurve, epsilon, closed);
47  plhs[0] = MxArray(approxCurve.reshape(1,0)); // Nx2
48  }
49  else if (rhs[0].isCell()) {
50  if (!rhs[0].isEmpty() && rhs[0].at<MxArray>(0).isInt32()) {
51  vector<Point> curve(rhs[0].toVector<Point>()), approxCurve;
52  approxPolyDP(curve, approxCurve, epsilon, closed);
53  plhs[0] = MxArray(approxCurve);
54  }
55  else {
56  vector<Point2f> curve(rhs[0].toVector<Point2f>()), approxCurve;
57  approxPolyDP(curve, approxCurve, epsilon, closed);
58  plhs[0] = MxArray(approxCurve);
59  }
60  }
61  else
62  mexErrMsgIdAndTxt("mexopencv:error", "Invalid points argument");
63 }
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
Main entry called from Matlab.
STL namespace.
struct mxArray_tag mxArray
Forward declaration for mxArray.
Definition: matrix.h:259
T at(T... args)
#define CV_32F
Mat reshape(int cn, int rows=0) const
LIBMWMEX_API_EXTERN_C void mexErrMsgIdAndTxt(const char *identifier, const char *err_msg,...)
Issue formatted error message with corresponding error identifier and return to MATLAB prompt...
void approxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed)
mxArray object wrapper for data conversion and manipulation.
Definition: MxArray.hpp:123
void nargchk(bool cond)
Alias for input/output arguments number check.
Definition: mexopencv.hpp:181
STL class.
#define CV_32S
Global constant definitions.
T c_str(T... args)
cv::Mat toMat() const