如何通过MEX将OpenCV C 垫的向量返回到MATLAB

How to return a vector of OpenCV C++ Mats to MatLab via mex

本文关键字:向量 返回 MATLAB 何通过 MEX OpenCV      更新时间:2023-10-16

我在C 中有一个OPENCV程序,该程序占用一个大垫子并返回一个较小垫子的向量,我试图使用MATLAB使用MEX(特别是MEXOPENCV)(特别是此处:https:https://Github.com/kyamagu/mexopencv)。例如,我只需用PLH [0] = mxarray(themats [0])将一个垫子回到PLH [0],但是我如何返回整个向量?

谢谢!

#include "mexopencv.hpp"
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
    // Check number of arguments
    nargchk(nlhs<=1 && nrhs==1);
    // Convert mxArray to cv::Mat
    cv::Mat mat = MxArray(prhs[0]).toMat();
    std::vector<cv::Mat> theMats;
    int ySize = 400;
    int xSize = 400;
    int yStride = ySize;
    int xStride = xSize;
    int cols = (mat.cols-xSize)/xStride + 1;
    int rows = (mat.rows-ySize)/yStride + 1;
    for (int i=0; i<cols; i++){
        for (int j=0; j<rows; j++){
            cv::Rect crop(cv::Point(i*xStride,j*yStride),
            cv::Point(i*xStride+xSize, j*yStride+ySize));
            theMats.push_back(mat(crop));
        }
    }
    // Convert cv::Mat back to mxArray
    plhs[0] = MxArray(theMats[0]); //I want theMats, not just theMats[0]
}

在CV :: MAT可能每个大小的一般情况下选项:

https://www.mathworks.com/help/matlab/apiref/mxcreatecellarrary.html

如果每个CV :: MAT的大小相同,则您也可以娱乐返回CV :: MAT作为N-D数字矩阵的集合,其中一个尺寸为每个CV :: MAT,其余的尺寸为每个CV :: MAT对象的维度。