c++中调用python 的属性配置

将python安装目录下的include和libs文件夹分别包含在VC++目录下,如下图:

c++中调用python 的实例

code 1:

#include <iostream>
#include <Python.h>
using namespace std;int main(int argc, char *argv[])
{Py_Initialize();PyRun_SimpleString("print 'Hello Python!'\n");Py_Finalize();return 0;
}

code2:

//.cpp调用pyhton .py文件
#include <iostream>
#include <Python.h>
using namespace std;int main()
{Py_Initialize();PyObject * pModule = NULL;PyObject * pFunc = NULL;pModule = PyImport_ImportModule("py_test");if (!pModule){cout << "get module failed!" << endl;exit(0);}pFunc = PyObject_GetAttrString(pModule, "Hello");PyEval_CallObject(pFunc, NULL);Py_Finalize();return 0;
}
#py_test.pydef Hello():print "Hello, Jason"

下面是调用python脚本的一般步骤:

  1. windows VS环境,首先在C++的工程文件总增加python安装目录下的include(附加包含目录)和libs目录(附加库目录)。
  2. 在需要用到python的C++文件中,添加#include "Python.h"
  3. 引用python的代码部分,都需要以Py_Initialize()开始,用Py_Finalize()结束
  4. python相关的对象多半声明为PyObject指针,如PyObject *pstr, *pmod, *pdict, *pfunc, *pargs等
  5. 最简单的调用一段python代码的方法:PyRun_SimpleString("...");
  6. 导入一个模块:pModule= PyImport_ImportModule("script")  //script,脚本的名字调用其中的一个函数Hello( ) pfunc = PyObject_GetAttrString(pModule, "Hello");用指定的参数运行这个函数:PyEval_CallObject(pfunc, pargs);
  7. 步骤6的另一种做法:导入一个模块:pname = PyString_FromString("script");    pModule = PyImport_Import(pname); 调用其中的函数pyPrint(name1, name2)pdict = PyModule_GetDict(pModule);        pfunc = PyDict_GetItemString(pdict, "pyPrint");pargs = Py_BuildValue("s, s", "Hello World", "again");运行这个函数:PyEval_CallObject(pfunc, pargs);注意,当py函数没有参数时,pargs = NULL
  8. 释放PyObject 指针:Py_DECREF(pobj)

下面code3实例为python脚本带参数:

//python函数带参数#include <python.h>
int main()
{Py_Initialize();PyObject * pModule = NULL;PyObject * pFunc = NULL;PyObject * pArg = NULL;pModule = PyImport_ImportModule("py_test2_para");pFunc = PyObject_GetAttrString(pModule, "add");pArg = Py_BuildValue("(i,i)", 10, 15); //构造一个元组PyEval_CallObject(pFunc, pArg);Py_Finalize();return 0;
}
#py_test_para.py,带参数
def add(a, b):print "a+b=", a+b

opencv中调用python

除了上面调用python脚本的方法,还可以使用c++代码中直接嵌入方式,先附一段嵌入的python代码:

/* embedding Python code */
char *pycode =
"from scipy import signal\n"
"def bwlp(order, f, samplingRate):\n"
"   b, a = signal.butter(order, f/samplingRate, 'low', analog=False)\n"
"   return b, a\n"
"a, b = bwlp(1, f, samplingRate)\n"
"a0 = a[0]\n"
"a1 = a[1]\n"
"b0 = b[0]\n"
"b1 = b[1]\n";

下面使用上面的python代码:

double low_a[2], low_b[2], high_a[2], high_b[2];
// call python butter func
PyObject *main_module, *main_dict;
PyObject *b0_obj, *b1_obj, *a0_obj, *a1_obj, *f_obj, *samplerate_obj;
Py_Initialize();// 检查初始化是否成功
if ( !Py_IsInitialized() ) {  return -1;  }  /* Setup the __main__ module to use */
main_module = PyImport_ImportModule("__main__");
main_dict = PyModule_GetDict(main_module);/* C var to Python var */
samplerate_obj = PyInt_FromLong(long(samplingRate));
f_obj = PyFloat_FromDouble(fl);
/* inject var into __main__ */
PyDict_SetItemString(main_dict, "f", f_obj);
PyDict_SetItemString(main_dict, "samplingRate", samplerate_obj);
PyRun_SimpleString(pycode);/* Extract the resultant var, double a, b */
b0_obj = PyMapping_GetItemString(main_dict, "b0");
a0_obj = PyMapping_GetItemString(main_dict, "a0");
b1_obj = PyMapping_GetItemString(main_dict, "b1");
a1_obj = PyMapping_GetItemString(main_dict, "a1");
low_b[0] = PyFloat_AsDouble(b0_obj);
low_b[1] = PyFloat_AsDouble(b1_obj);
low_a[0] = PyFloat_AsDouble(a0_obj);
low_a[1] = PyFloat_AsDouble(a1_obj);
Py_Finalize();

参考:

http://blog.csdn.net/taiyang1987912/article/details/44779719

https://www.zhihu.com/question/23003213

http://blog.csdn.NET/sunboyiris/article/details/23737915

http://blog.csdn.net/abcjennifer/article/details/49377123

C/C++调用python,opencv+python相关推荐

  1. python+opencv用电脑调用手机摄像头或其他网路摄像头

    python+opencv用电脑调用手机摄像头或其他网路摄像头 文章目录: 1 获取手机摄像头或网络摄像头的ip 1.1 获取手机摄像头的ip 1.2 获取网络摄像头的IP 1.3 关于RTSP协议 ...

  2. Qt + Python + OpenCV图标替换工具 之 Python调用dll(三)

    目录 上一篇博文 程序的下载地址以及源码 Python调用dll 上一篇博文 Qt + Python + OpenCV图标替换工具 之 获取颜色及生成图片(二) https://blog.csdn.n ...

  3. python+opencv打开摄像头、拍摄指定次数的照片_python+openCV调用摄像头拍摄和处理图片的实现...

    在深度学习过程中想做手势识别相关应用,需要大量采集手势图片进行训练,作为一个懒人当然希望飞快的连续采集图片并且采集到的图片就已经被处理成统一格式的啦..于是使用python+openCV调用摄像头,在 ...

  4. Python+OpenCV 调用手机摄像头并实现人脸识别

    文章内容: 1.windows 环境下安装 OpenCV 机器视觉环境搭建: 2.基于通过 Python+OpenCV调用手机摄像头并实现人脸检测识别. 目录 1 实验环境 2 实验准备 2.1 下载 ...

  5. Python + opencv 调用工业相机对模块进行拍照扫描并分析内容(一)

    ** Python + opencv 调用工业相机对模块进行拍照扫描并分析内容(一) ** 利用厂家提供的文档和资料,安装好SDK,将dll文件放入系统位置: 1)Windows 将 JHCap2.d ...

  6. python+opencv调用ip摄像头(基于RTSP实现)

    python+opencv调用ip摄像头(基于RTSP实现) 采用RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,RTSP是TCP/IP协议体系中 ...

  7. Python+opencv调用摄像头实现拍照并保存

    Python+opencv调用摄像头实现拍照并保存 安装 OpenCV库 详细源码 注意事项 安装 OpenCV库 pip install opencv-python 详细源码 调用外接摄像头实现拍照 ...

  8. python+openCV调用摄像头拍摄和处理图片

    在深度学习过程中想做手势识别相关应用,需要大量采集手势图片进行训练,作为一个懒人当然希望飞快的连续采集图片并且采集到的图片就已经被处理成统一格式的啦..于是使用python+openCV调用摄像头,在 ...

  9. python+opencv调用摄像头视频图像处理

    在做深度学习的时候,难免会用到摄像头采集图像.在这个就会用到python调用摄像头+opencv图像处理.视频图像的处理和单幅图片处理是一样的,视频就是很多单幅图像连续播放.每秒播放(采集)的图片数量 ...

  10. 如何将c语言程序封装供python调用_一起学opencv-python四十五:opencv绑定python,python和c++互调...

    opencv-python系列教程来到了最后一讲.感谢一路的坚持. 如何生成OpenCV-Python绑定? 在OpenCV中,所有算法都是用C ++实现的.但是这些算法可以用于不同的语言,如Pyth ...

最新文章

  1. Java自学笔记(13):【面向对象】方法覆盖,final关键字,对象转型
  2. #ifndef 与 #program once 的区别
  3. 遍历boost::fibers::unbuffered_channel< unsigned int >的测试程序
  4. Centos7 下yum安装mysql
  5. Getting Started with Google Guava--思维导图笔记
  6. amos调节变量怎么画_插画师该怎么收费?两个方法一看就懂。
  7. QuickSort 优化后的快速排序算法
  8. 04Linux与Unix的关系
  9. 关于.NET异步调用的初步总结
  10. 通过Javascript Facebook API获取Facebook用户信息,以及当前用户的好
  11. [Tizen开发]SDB调试工具使用简介
  12. 计算机 怎么挂 两块 硬盘,双硬盘怎么安装?电脑双硬盘安装教程
  13. python 保存为tiff文件, 图像转tiff, tif文件添加投影
  14. 网络安全——端口对应服务大全(白帽必备万字快查表)
  15. 3D建模最常用的是那三款软件?
  16. 台式计算机打印机共享,只需两步台式和笔记本电脑可共享打印机
  17. 登峰造极__边界均衡生成对抗网络(BEGAN)(七)
  18. 隔壁孩子10篇博客node入门而且写了一个前后端分离项目,你怎么还在睡觉!!!(五)
  19. 行动诠释价值,城联优品韩董事长出席广东英德抗洪捐赠公益活动会
  20. 智慧农业整体解决方案

热门文章

  1. 分布式,项目发布管理
  2. 856. Score of Parentheses
  3. javaScript 中的异步编程
  4. Android项目打第三方jar包
  5. 无Xaml的WPF展示
  6. 地址修改验证TAR Oracle部署
  7. html 中电话号码的使用
  8. DBeaver连接SqlServer报“The server selected protocol version TLS10 is not accepted by client prefere”的错误
  9. .Net Core之初识及WebApi的简单使用和发布
  10. SqlServer 2008R2修改表结构提示“不允许保存更改”解决方案