医学软件项目开发(四):c++调用分割算法实例

本文详细介绍了在C++项目中调用Python分割算法的配置步骤,包括修改库引用和Python头文件,以及在项目代码实现过程中需要注意的问题,如避免多次使用Py_Finalize()和确保每个算法的文件及函数名唯一。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、配置问题

1.python36.lib

将pragma comment(lib,“python38_d.lib”)改为pragma comment(lib,“python38.lib”),并且注释掉 # define Py_DEBU

也可复制粘贴重命名python36_d.lib

2.修改object.h和pyconfig.h为引入import_array函数
//object.h54行修改
/* Py_DEBUG implies Py_TRACE_REFS. */
#if defined(Py_DEBUG) && !defined(Py_TRACE_REFS)
#define Py_TRACE_REFS
#endif

/* Py_DEBUG implies Py_TRACE_REFS. */
#if defined(Py_DEBUG) && !defined(Py_TRACE_REFS)
//#define Py_TRACE_REFS
#endif
//pyconfig358行修改
#if defined(Py_DEBUG) && !defined(Py_TRACE_REFS)
//#define Py_TRACE_REFS
#endif

#ifdef _DEBUG
//#	define Py_DEBUG
#endif
//代码前添加此函数
size_t init_numpy()
{
   
   //初始化 numpy 执行环境,主要是导入包,python2.7用void返回类型,python3.0以上用int返回类型
	import_array();
}

二、项目代码

//启动脊柱勾边分割
QVector<QPointF> BllSegPoint::spineOutline()
{
   
   

	QVector<QPointF> pathPointVector;
	//Py_SetPythonHome(L"C:/Program Files/Python36");
	Py_Initialize();
	// 检查初始化是否成功  
	if (!Py_IsInitialized())
	{
   
   
		qDebug() << "Py_IsInitialized Error";
		return pathPointVector;
	}
	
	if (m_num == 0)//临时-只运行一次
	{
   
   
		init_numpy();
		m_num++;
	}
	PyRun_SimpleString("import sys");
	PyRun_SimpleString("print ('---import sys---')");
	PyRun_SimpleString("sys.path.append('./')");
	PyRun_SimpleString("sys.path.append('D:/WorkSpace/MainModule1222/MainModule1222/x64/Debug/end2end_spine_outline/')");
	PyRun_SimpleString("sys.path.append('D:/anaconda3/envs/my_pytorch/Lib/site-packages')");

	
	PyObject *pModule = NULL;
	pModule = PyImport_ImportModule("end2end_spine");
	if (!pModule)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值