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;
}
Logo

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

更多推荐