c++ 中 opencv Mat 与 python 矩阵格式 ndarry 互相转换
PyObject *PyFunction::matToNdarray(Mat mat,int NPY_TYPE = NPY_FLOAT32)//Mat转Ndarray{if (!mat.isContinuous()) { mat = mat.clone(); }//判断是否是连续的MAT,如果是ROI则不连续,需要将内存进行拷贝vector<npy_intp> dims_vector;
·
PyObject *PyFunction::matToNdarray(Mat mat,int NPY_TYPE = NPY_FLOAT32)//Mat转Ndarray
{
if (!mat.isContinuous()) { mat = mat.clone(); }//判断是否是连续的MAT,如果是ROI则不连续,需要将内存进行拷贝
vector<npy_intp> dims_vector;
for (int i = 0;i < mat.dims;++i) { dims_vector.push_back(mat.size[i]); }
npy_intp *dim_np = new npy_intp[sizeof(dims_vector)];
if (!dims_vector.empty()) { memcpy(dim_np, &dims_vector[0], dims_vector.size() * sizeof(npy_intp)); }
PyObject *pythonValue = PyArray_SimpleNewFromData(mat.dims, dim_np, NPY_TYPE, mat.data);
return pythonValue;
}
Mat PyFunction::ndarrayToMat(PyObject *python_value, int MAT_TYPE = CV_32F)//Ndarray转Mat
{
PyArrayObject *array_value;
PyArray_OutputConverter(python_value, &array_value);
npy_intp *shape = array_value->dimensions;
int dim_lentgh = array_value->nd;//获得ndarray中有几个维度
vector<int> dims_vector;
for (int i = 0;i < array_value->nd;++i) { dims_vector.push_back(shape[i]); }
int *dim_mat = new int[sizeof(dims_vector)];
if (!dims_vector.empty()) { memcpy(dim_mat, &dims_vector[0], dims_vector.size() * sizeof(int)); }
Mat mat(array_value->nd, dim_mat, MAT_TYPE, PyArray_DATA(array_value));
return mat;
}

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)