11 #include "opencv2/xfeatures2d.hpp" 21 map<int,Ptr<BriefDescriptorExtractor> > 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] = createBriefDescriptorExtractor(
45 rhs.begin() + 2, rhs.end());
51 Ptr<BriefDescriptorExtractor> obj = obj_[id];
52 if (method ==
"delete") {
56 else if (method ==
"typeid") {
58 plhs[0] =
MxArray(
string(
typeid(*obj).name()));
60 else if (method ==
"clear") {
64 else if (method ==
"load") {
65 nargchk(nrhs>=3 && (nrhs%2)==1 && nlhs==0);
67 bool loadFromString =
false;
68 for (
int i=3; i<nrhs; i+=2) {
69 string key(rhs[i].toString());
71 objname = rhs[i+1].toString();
72 else if (key ==
"FromString")
73 loadFromString = rhs[i+1].toBool();
75 mexErrMsgIdAndTxt(
"mexopencv:error",
76 "Unrecognized option %s", key.c_str());
78 obj_[id] = (loadFromString ?
79 Algorithm::loadFromString<BriefDescriptorExtractor>(rhs[2].toString(), objname) :
80 Algorithm::load<BriefDescriptorExtractor>(rhs[2].toString(), objname));
82 else if (method ==
"save") {
84 obj->save(rhs[2].toString());
86 else if (method ==
"empty") {
88 plhs[0] =
MxArray(obj->empty());
90 else if (method ==
"getDefaultName") {
92 plhs[0] =
MxArray(obj->getDefaultName());
94 else if (method ==
"defaultNorm") {
98 else if (method ==
"descriptorSize") {
100 plhs[0] =
MxArray(obj->descriptorSize());
102 else if (method ==
"descriptorType") {
106 else if (method ==
"compute") {
108 if (rhs[2].isNumeric()) {
109 Mat image(rhs[2].toMat(CV_8U)), descriptors;
110 vector<KeyPoint> keypoints(rhs[3].toVector<KeyPoint>());
111 obj->compute(image, keypoints, descriptors);
112 plhs[0] =
MxArray(descriptors);
116 else if (rhs[2].isCell()) {
118 vector<Mat> images, descriptors;
120 vector<MxArray> arr(rhs[2].toVector<MxArray>());
121 images.reserve(arr.size());
122 for (vector<MxArray>::const_iterator it = arr.begin(); it != arr.end(); ++it)
123 images.push_back(it->toMat(CV_8U));
125 vector<vector<KeyPoint> > keypoints(rhs[3].toVector(
126 const_mem_fun_ref_t<vector<KeyPoint>,
MxArray>(
127 &MxArray::toVector<KeyPoint>)));
128 obj->compute(images, keypoints, descriptors);
129 plhs[0] =
MxArray(descriptors);
134 mexErrMsgIdAndTxt(
"mexopencv:error",
"Invalid arguments");
139 mexErrMsgIdAndTxt(
"mexopencv:error",
140 "Unrecognized operation %s",method.c_str());
const ConstMap< int, std::string > NormTypeInv
Inverse norm type map for option processing.
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.
const ConstMap< int, std::string > ClassNameInvMap
Translates data type definition used in OpenCV to that of MATLAB.
Global constant definitions.