我创建了一个 Matlab 引擎来将 OpenCV Mat 文件转换为 Matlab 矩阵。但是,我得到了错误的结果。我附上了我的代码,以便您可以直接测试它。
#pragma comment (lib, "libmat.lib")
#pragma comment (lib, "libmx.lib")
#pragma comment (lib, "libmex.lib")
#pragma comment (lib, "libeng.lib")
void cvLoadMatrixToMatlab(const Mat& m, const string name, Engine *m_pEngine)
{
int rows=m.rows;
int cols=m.cols;
string text;
mxArray *T=mxCreateDoubleMatrix(cols, rows, mxREAL);
memcpy((char*)mxGetPr(T), (char*)m.data, rows*cols*sizeof(char));
engPutVariable(m_pEngine, name.c_str(), T);
text = name + "=" + name + "'"; // Column major to row major
engEvalString(m_pEngine, text.c_str());
mxDestroyArray(T);
}
int main(int argc, char **argv)
{
/*Open Matlab Engine*/
Engine *m_pEngine;
m_pEngine = engOpen("null");
cv::Mat img = imread("panda.jpg",0);
cvLoadMatrixToMatlab(img,"imgMatlab", m_pEngine);
engEvalString(m_pEngine, "imshow(imgMatlab)");
cv::waitKey(0);
}
我怀疑下面的代码会导致这个问题,但我不知道如何解决它。
memcpy((char*)mxGetPr(T), (char*)m.data, rows*cols*sizeof(char));