#include //包含python的头文件
// 1 c/cpp中的函数
int my_c_function(const char *arg)
{
int n = system(arg);
return n;
}
// 2 python 包装
static PyObject * wrap_my_c_fun(PyObject *self, PyObject *args)
{
const char * command;
int n;
if (!PyArg_ParseTuple(args, "s", &command))//这句是把python的变量args转换成c的变量command
return NULL;
n = my_c_function(command);//调用c的函数
return Py_BuildValue("i", n);//把c的返回值n转换成python的对象
}
// 3 方法列表
static PyMethodDef MyCppMethods[] = {
//MyCppFun1是python中注册的函数名,wrap_my_c_fun是函数指针
{"MyCppFun1", wrap_my_c_fun, METH_VARARGS, "Execute a shell command."},
{NULL, NULL, 0, NULL}
};
// 4 模块初始化方法
PyMODINIT_FUNC initMyCppModule(void)
{
//初始模块,把MyCppMethods初始到MyCppModule中
PyObject *m = Py_InitModule("MyCppModule", MyCppMethods);
if (m == NULL) return;
}
import MyCppModule//导入python的模块(也就是c的模块,注意so文件名是MyCppModule)
r = MyCppModule.MyCppFun1("ls -l")//调用
print r
print "OK"
从这里开始是我个人的分析
原来如此!static PyMethodDef methods[] = {
#include "pyopencv_generated_func_tab.h"
{"createTrackbar", pycvCreateTrackbar, METH_VARARGS, "createTrackbar(trackbarName, windowName, value, count, onChange) -> None"},
{"setMouseCallback", (PyCFunction)pycvSetMouseCallback, METH_KEYWORDS, "setMouseCallback(windowName, onMouse [, param]) -> None"},
{NULL, NULL},
}; 相当于static PyMethodDef MyCppMethods[]
static PyMethodDef old_methods[] = {
#if PYTHON_USE_NUMPY
{"fromarray", (PyCFunction)pycvfromarray, METH_KEYWORDS, "fromarray(array [, allowND]) -> CvMat"},
#endif
{"FindDataMatrix", pyfinddatamatrix, METH_VARARGS},
{"temp_test", temp_test, METH_VARARGS},
#include "generated1.i"
{NULL, NULL},
};
目前我就追踪到这里,貌似opencv的python接口也不像这里。但是也没有想到会在哪里,如果哪位大神知道麻烦告诉我,我将来知道了也会在这里更新。