c++调用复杂的python3脚本

写在前面

因为数字图像处理课程大作业选择了人脸识别,要求mfc实现,但感觉单纯的人脸识别有些简单,所以加上了人脸比对。在这期间尝试了各种方法,准确度都不高,最终决定使用百度API。而c++实现url访问运营商一向较为麻烦,所以想c++调取python脚本实现。

正文

平台:

vs2017 + python3.7.6

配置:

python3.7.0配置
python下载就不多说,网上教程很多。这里强调一下在安装时,要注意勾选debug选项。
若已经安装好python,可以打开修改程序:在这里插入图片描述
选择Modify
在这里插入图片描述
勾选下选项:
在这里插入图片描述
查看自己python安装路径下的libs文件夹,若有pythonxx.lib与pythonxx_d.lib
在这里插入图片描述
即可。
至此,python配置完成。
vs配置
配置vc++目录:
包含目录为自己python安装路径下的include,库目录为/libs
在这里插入图片描述
配置连接器——输入:
加入刚刚pythonxx_d.lib的文件路径
在这里插入图片描述
注意以上配置为Debug模式,x64版本,Relese下将pythonxx_.lib改为pythonxx.lib,x86要下载32位的python!

在这里插入图片描述
代码部分:
头文件:

#include <Python.h>

main:

Py_Initialize();//创造python虚拟环境初始化
if(!Py_IsInitialized())
	{
		cout<<"initial filed!";
		exit(0);
	}
PyRun_SimpleString("import sys");//必要步骤
PyRun_SimpleString("sys.path.append('./')");//''里是你的python脚本的路径,注意不用加python脚本名
//创建python对象,在C++中,python对象均为PyObject
PyObject *pModule = NULL;
PyObject *pFunc = NULL;
pModule = PyImport_ImportModule("python_name");//""中为你的脚本名,注意不加后缀.py
if(pModule)
{
	pFunc = PyObject_GetAttrString(pModule, "function_name");//""中为你想要调用的函数名
	if(pFunc)
	{
	//若C++给python传参为字符串,不可以直接传string,需要转为const char*
	//pic_path与pic_path2均为string
		const char *p1 = pic_path.c_str(); 
		const char *p2 = pic_path2.c_str();
	//C++给python传参的方式为元组,这里新建大小为2个python对象的元组
		PyObject *args = PyTuple_New(2);
	//"s"代表传递的参数类型为字符串
	//"i"代表传递的参数类型为整数
		PyTuple_SetItem(args, 0, Py_BuildValue("s", p1));
		PyTuple_SetItem(args, 1, Py_BuildValue("s", p2));
	//接受python返回的参数
		PyObject *pReturn = NULL;
		pReturn = PyEval_CallObject(pFunc, args);//执行python脚本
	//将python返回对象转为int类型
	//若想转为字符型
	//char s[256];
	//PyArg_Parse(pReturn, "s", &s);
		int nResult;
		PyArg_Parse(pReturn, "i", &nResult);
		cout<<nResult;
	}
	else
		cout<<"function error";
}
else
	cout<<"Module error";

结尾

给大家展示一下人脸识别成果。
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

K_K_Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值