如何通过MEX将OpenCV C 垫的向量返回到MATLAB
How to return a vector of OpenCV C++ Mats to MatLab via mex
我在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对象的维度。
相关文章:
- 矩阵向量乘法(cublasDgemv)返回零
- C++中函数的向量返回类型引发错误
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 在 C++11 中,如何查找并返回以给定字符串开头的字符串向量中的所有项?
- 从 std<Derived>::shared_ptr 的向量返回 std::shared_ptr<Base>
- 从对象的向量返回某个类的对象
- C++ 将向量中出现 n 次的所有元素作为向量返回
- 向量返回负大小 c++
- 如何从向量返回给定类型的元素?
- 将对象的向量返回到函数
- 尝试从向量返回对象时出现"没有可行的重载运算符 [] 错误
- 调用函数时,如何通过向量返回类型
- 向量返回/加法算法的问题
- 在向量返回上移动语义行为
- 从int c++的向量返回一个无符号长
- 向量返回空 C++
- 从融合向量的std向量返回列,无需复制
- C++为空向量上的向量返回什么::back()
- 函数的向量返回
- 如何用适当的OO有效地将100万的私有向量返回给其他几个类