OpenCV Mat ファイルを Matlab マトリックスに変換する 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));