vs2013在图像处理中的应用(7):开发Python扩展

快乐虾

http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651)

欢迎转载,但请保留作者信息



很久没有摸图像处理的东西了,近期刚好需要有此需求,希望能够有一个比较好用的开发环境。在学校的时候做图像处理一直用的是matlab,不过现在正好在做VELT的开发,尝试用vs2013+python构造一个适合于自己用的开发环境。


在图像处理中,虽然已经可以用python操纵opencv完成一些算法,但总免不了需要自己写一些C/C++的代码,因而我们学习一下如何用vs开发python的扩展。


1  阶乘示例


在这个示例中,我们用C++实现一个阶乘的函数并用python调用它。


首先创建一个VSDll工程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所在的目录:


因为我们装的pythonRelease版的,因此这个扩展也只能用Release生成,否则有链接错误。


生成!一切正常。


在命令行下测试:


搞定!


2  代码调试


下面试试用VS2013调试这个扩展。

首先在解决方案中添加一个Python Application,写上几行测试代码:

import PyExt

 

result= PyExt.fact(5)

 

print result

print "ok"

 


设置为启动项目并运行:


此时进行的是脚本的调试。


修改python工程的属性:


钩上这里的Enable native code debugging


fact函数中设置断点:


F5运行:


正确中断下来,我们可以像普通C/C++程序一样调试。


 


3  脚本与C/C++的混合调试


要实现脚本与C/C++代码的混合调试,需要下载python2.7.9pdb文件:


https://github.com/Microsoft/PTVS/wiki/Symbols-for-Python-mixed-mode-debugging


将文件解压缩到C:\Python27\python-2.7.9-pdb


再将此目录添加到VS的符号查找路径中:


再次按F5VS首先在Python脚本上中断下来:


再按F11执行下一条语句的时候,VS停在了我们的wrap函数入口上:


单步执行到函数的末尾,再按F10VS又停在了Python脚本上!!


PTVS太强大了~~~~~~~








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

嵌云阁主

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

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

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

打赏作者

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

抵扣说明:

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

余额充值