2017-09-22 4 views
0

私は大きなMatをとり、mexを使ってMatLabで使用しようとしているOpenCVプログラムをC++で持っています(特にmexOpenCVはここに:https://github.com/kyamagu/mexopencv)。 plhs [0] = MxArray(theMats [0])を使って、単一のMatをplhs [0]に戻すことはできますが、どのようにベクトル全体を返すことができますか?OpenCV C++マットのベクターをmex経由でMatLabに返す方法

ありがとうございました!

マトリックスとしてのcv ::マットがそれぞれ各CVを返して、異なるサイズのものとすることができる一般的なケース::マットに
#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] 

} 

答えて

0

とセル配列としてコレクションを返すには、おそらくあなたの唯一かつ最良の選択肢である。

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

同じ大きさのcvの各::マットた場合、あなたはまた、CVのコレクションを返すことができ楽しま::マット寸法の一つは、各品種であるND数値行列として::マットと残りの次元は各cv :: Matオブジェクトの次元数です。

関連する問題