vs2013在图像处理中的应用(7):开发Python扩展
2015-05-20 23:59
369 查看
快乐虾http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651)欢迎转载,但请保留作者信息
很久没有摸图像处理的东西了,近期刚好需要有此需求,希望能够有一个比较好用的开发环境。在学校的时候做图像处理一直用的是matlab,不过现在正好在做VELT的开发,尝试用vs2013+python构造一个适合于自己用的开发环境。
在图像处理中,虽然已经可以用python操纵opencv完成一些算法,但总免不了需要自己写一些C/C++的代码,因而我们学习一下如何用vs开发python的扩展。
首先创建一个VS的Dll工程PyExt,再按照Python扩展的写法添加代码:
这段代码编译有错误,需要将python的包含路径加上:
接着加上python2.7库文件所在的目录:
将DLL的扩展名改为pyd,将输出目录设置为python扩展DLL所在的目录:
因为我们装的python是Release版的,因此这个扩展也只能用Release生成,否则有链接错误。
生成!一切正常。
在命令行下测试:
搞定!
设置为启动项目并运行:
此时进行的是脚本的调试。
修改python工程的属性:
钩上这里的Enable native code debugging。
在fact函数中设置断点:
再F5运行:
正确中断下来,我们可以像普通C/C++程序一样调试。
https://github.com/Microsoft/PTVS/wiki/Symbols-for-Python-mixed-mode-debugging
将文件解压缩到C:\Python27\python-2.7.9-pdb
再将此目录添加到VS的符号查找路径中:
再次按F5,VS首先在Python脚本上中断下来:
再按F11执行下一条语句的时候,VS停在了我们的wrap函数入口上:
单步执行到函数的末尾,再按F10,VS又停在了Python脚本上!!
PTVS太强大了~~~~~~~
很久没有摸图像处理的东西了,近期刚好需要有此需求,希望能够有一个比较好用的开发环境。在学校的时候做图像处理一直用的是matlab,不过现在正好在做VELT的开发,尝试用vs2013+python构造一个适合于自己用的开发环境。
在图像处理中,虽然已经可以用python操纵opencv完成一些算法,但总免不了需要自己写一些C/C++的代码,因而我们学习一下如何用vs开发python的扩展。
1 阶乘示例
在这个示例中,我们用C++实现一个阶乘的函数并用python调用它。首先创建一个VS的Dll工程PyExt,再按照Python扩展的写法添加代码:
// PyExt.cpp : 定义 DLL 应用程序的导出函数。 // #include "stdafx.h" #include "PyExt.h" #include <Python.h> int fact(int n) { if (n <= 1) return 1; else return n * fact(n - 1); } PyObject* wrap_fact(PyObject* self, PyObject* args) { int n, result; if (!PyArg_ParseTuple(args, "i:fact", &n)) return NULL; result = fact(n); return Py_BuildValue("i", result); } static PyMethodDef exampleMethods[] = { { "fact", wrap_fact, METH_VARARGS, "Caculate N!" }, { NULL, NULL } }; extern "C" PYEXT_API void initPyExt() { PyObject* m; m = Py_InitModule("example", exampleMethods); }
这段代码编译有错误,需要将python的包含路径加上:
接着加上python2.7库文件所在的目录:
将DLL的扩展名改为pyd,将输出目录设置为python扩展DLL所在的目录:
因为我们装的python是Release版的,因此这个扩展也只能用Release生成,否则有链接错误。
生成!一切正常。
在命令行下测试:
搞定!
2 代码调试
下面试试用VS2013调试这个扩展。首先在解决方案中添加一个Python Application,写上几行测试代码:import PyExt result= PyExt.fact(5) print resultprint "ok"设置为启动项目并运行:
此时进行的是脚本的调试。
修改python工程的属性:
钩上这里的Enable native code debugging。
在fact函数中设置断点:
再F5运行:
正确中断下来,我们可以像普通C/C++程序一样调试。
3 脚本与C/C++的混合调试
要实现脚本与C/C++代码的混合调试,需要下载python2.7.9的pdb文件:https://github.com/Microsoft/PTVS/wiki/Symbols-for-Python-mixed-mode-debugging
将文件解压缩到C:\Python27\python-2.7.9-pdb
再将此目录添加到VS的符号查找路径中:
再次按F5,VS首先在Python脚本上中断下来:
再按F11执行下一条语句的时候,VS停在了我们的wrap函数入口上:
单步执行到函数的末尾,再按F10,VS又停在了Python脚本上!!
PTVS太强大了~~~~~~~
相关文章推荐
- 【opencv+python】图像处理之二、几何变换(仿射与投影)的应用
- redis数据库事务处理及hash,list,set类型的python开发应用 推荐
- python PIL/Pillow图像扩展、复制、粘贴处理
- Mabook 安装Python最新版本(3.6.4)、GUI开发环境、图像处理、视频处理环境--------完整流程
- python PIL/Pillow图像扩展、复制、粘贴处理
- 【opencv+python】图像处理之二、几何变换(仿射与投影)的应用
- 【Android应用开发技术:图像处理】章节列表
- 使用OpenCV开发iOS图像处理应用(To be continued..)
- 牛人博客链接--高级算法、智能视频、嵌入式软件、DSP应用开发,algorithem,c++,c,视频处理,图像处理
- python全栈开发-re模块(正则表达式)应用(字符串的处理)
- 各种与视频编解码以及视频图像处理的应用相关的新技术,新方法,各种软件开发相关的算法,思想。
- vs2013在图像处理中的应用(4):用Traits进行界面开发
- 【Android应用开发技术:图像处理】Bitmap显示性能优化分析
- Python3与OpenCV3.3 图像处理(十二)--图像直方图应用
- 推广一下《PHP扩展开发及内核应用》,经典好书,翻译完成。
- 图像处理之应用卷积– 轧花与边缘检测
- Python图像处理(16):图像金字塔
- CXimage图像处理类的应用小结
- Python图像处理(17):pyWavelet
- 用Python和Google AppEngine开发基于Google架构的应用软件