Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}