std::vector<cv::Vec<T,cn> > MxArrayToVectorVec(const MxArray& arr) { std::vector<cv::Vec<T,cn> > vv; if (arr.isNumeric()) { if (arr.numel() == cn) vv.push_back(arr.toVec<T,cn>()); else arr.toMat(cv::Vec<T,cn>::depth).reshape(cn, 0).copyTo(vv); } else if (arr.isCell()) { /* std::vector<MxArray> va(arr.toVector<MxArray>()); vv.reserve(va.size()); for (std::vector<MxArray>::const_iterator it = va.begin(); it != va.end(); ++it) vv.push_back(it->toVec<T,cn>()); */ vv = arr.toVector( std::const_mem_fun_ref_t<cv::Vec<T,cn>, MxArray>( &MxArray::toVec<T,cn>)); } else mexErrMsgIdAndTxt("mexopencv:error", "Unable to convert MxArray to std::vector<cv::Vec<T,cn>>"); return vv; }
std::vector<cv::Rect_<T> > MxArrayToVectorRect(const MxArray& arr) { std::vector<cv::Rect_<T> > vr; if (arr.isNumeric()) { if (arr.numel() == 4) vr.push_back(arr.toRect_<T>()); else arr.toMat(cv::DataType<T>::depth).reshape(4, 0).copyTo(vr); } else if (arr.isCell()) { /* std::vector<MxArray> va(arr.toVector<MxArray>()); vr.reserve(va.size()); for (std::vector<MxArray>::const_iterator it = va.begin(); it != va.end(); ++it) vr.push_back(it->toRect_<T>()); */ vr = arr.toVector( std::const_mem_fun_ref_t<cv::Rect_<T>, MxArray>( &MxArray::toRect_<T>)); } else mexErrMsgIdAndTxt("mexopencv:error", "Unable to convert MxArray to std::vector<cv::Rect_<T>>"); return vr; }