11 #include "opencv2/xfeatures2d.hpp"    21 map<int,Ptr<StarDetector> > obj_;
    31 void mexFunction(
int nlhs, mxArray *plhs[], 
int nrhs, 
const mxArray *prhs[])
    37     vector<MxArray> rhs(prhs, prhs+nrhs);
    38     int id = rhs[0].toInt();
    39     string method(rhs[1].toString());
    42     if (method == 
"new") {
    44         obj_[++last_id] = createStarDetector(rhs.begin() + 2, rhs.end());
    50     Ptr<StarDetector> obj = obj_[id];
    51     if (method == 
"delete") {
    55     else if (method == 
"typeid") {
    57         plhs[0] = 
MxArray(
string(
typeid(*obj).name()));
    59     else if (method == 
"clear") {
    63     else if (method == 
"load") {
    64         nargchk(nrhs>=3 && (nrhs%2)==1 && nlhs==0);
    66         bool loadFromString = 
false;
    67         for (
int i=3; i<nrhs; i+=2) {
    68             string key(rhs[i].toString());
    70                 objname = rhs[i+1].toString();
    71             else if (key == 
"FromString")
    72                 loadFromString = rhs[i+1].toBool();
    74                 mexErrMsgIdAndTxt(
"mexopencv:error",
    75                     "Unrecognized option %s", key.c_str());
    77         obj_[id] = (loadFromString ?
    78             Algorithm::loadFromString<StarDetector>(rhs[2].toString(), objname) :
    79             Algorithm::load<StarDetector>(rhs[2].toString(), objname));
    81     else if (method == 
"save") {
    83         obj->save(rhs[2].toString());
    85     else if (method == 
"empty") {
    87         plhs[0] = 
MxArray(obj->empty());
    89     else if (method == 
"getDefaultName") {
    91         plhs[0] = 
MxArray(obj->getDefaultName());
    93     else if (method == 
"detect") {
    94         nargchk(nrhs>=3 && (nrhs%2)==1 && nlhs<=1);
    95         if (rhs[2].isNumeric()) {  
    97             for (
int i=3; i<nrhs; i+=2) {
    98                 string key(rhs[i].toString());
   100                     mask = rhs[i+1].toMat(CV_8U);
   102                     mexErrMsgIdAndTxt(
"mexopencv:error",
   103                         "Unrecognized option %s", key.c_str());
   105             Mat image(rhs[2].toMat(rhs[2].isUint16() ? CV_16U : CV_8U));
   106             vector<KeyPoint> keypoints;
   107             obj->detect(image, keypoints, mask);
   110         else if (rhs[2].isCell()) {  
   112             for (
int i=3; i<nrhs; i+=2) {
   113                 string key(rhs[i].toString());
   116                     vector<MxArray> arr(rhs[i+1].toVector<MxArray>());
   118                     masks.reserve(arr.size());
   119                     for (vector<MxArray>::const_iterator it = arr.begin(); it != arr.end(); ++it)
   120                         masks.push_back(it->toMat(CV_8U));
   123                     mexErrMsgIdAndTxt(
"mexopencv:error",
   124                         "Unrecognized option %s", key.c_str());
   129                 vector<MxArray> arr(rhs[2].toVector<MxArray>());
   130                 images.reserve(arr.size());
   131                 for (vector<MxArray>::const_iterator it = arr.begin(); it != arr.end(); ++it)
   132                     images.push_back(it->toMat(it->isUint16() ? CV_16U : CV_8U));
   134             vector<vector<KeyPoint> > keypoints;
   135             obj->detect(images, keypoints, masks);
   139             mexErrMsgIdAndTxt(
"mexopencv:error", 
"Invalid arguments");
   147         mexErrMsgIdAndTxt(
"mexopencv:error",
   148             "Unrecognized operation %s",method.c_str());
 void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
Main entry called from Matlab. 
mxArray object wrapper for data conversion and manipulation. 
void nargchk(bool cond)
Alias for input/ouput arguments number check. 
Common definitions for the features2d and xfeatures2d modules. 
Global constant definitions.