利用SWIG将c++编译成python可调用的包
基本操作可见官方指南:http://www.swig.org/Doc1.3/Python.html
下面主要为实际复杂点的情况(windows10):
- 此文为官方指南的补充,需要配置swing、python27或36对应的VS
文件内容
huizi_loc.cpp 文件内容:
typedef struct{ //此处想输出一个数组
int x1;
int y1;
int x2;
int y2;
int x3;
int y3;
int x4;
int y4;
}location;
location huizi_loc(char file[256])
{
//一堆实现代码,此处只为了讲结构
location loc;
loc.x1=lct_res.res_pt[0][0];
loc.y1=lct_res.res_pt[0][1];
loc.x2=lct_res.res_pt[1][0];
loc.y2=lct_res.res_pt[1][1];
loc.x3=lct_res.res_pt[2][0];
loc.y3=lct_res.res_pt[2][1];
loc.x4=lct_res.res_pt[3][0];
loc.y4=lct_res.res_pt[3][1];
return loc;
}
huizi_loc.h 文件内容:
typedef struct{
int x1;
int y1;
int x2;
int y2;
int x3;
int y3;
int x4;
int y4;
}location;
location huizi_loc(char file[256]);
huizi_loc.i 文件内容:
%module huizi_loc
%{
#define SWIG_FILE_WITH_INIT
#include "huizi_loc.h"
%}
typedef struct{
int x1;
int y1;
int x2;
int y2;
int x3;
int y3;
int x4;
int y4;
}location;
location huizi_loc(char file[256]);
setup.py 文件内容:
#!/usr/bin/env python
"""
setup.py file for SWIG example
"""
from distutils.core import setup, Extension
huiuzi_module = Extension('_huizi_loc',
sources=['huizi_loc_wrap.cxx', 'huizi_loc.cpp'],
language="c++",
# 此处注意\\,是你怎么配置VS的就怎么配置这里
include_dirs=[
"D:\\opencv\\build\\include\\opencv2",
"D:\\opencv\\build\\include\\opencv",
"D:\\opencv\\build\\include",
"E:\\pdf_parse\\HIK_QR_Locate\\demo",
"E:\\pdf_parse\\HIK_QR_Locate\\HIK_QRL_src"
],
library_dirs=[
"D:\\opencv\\build\\x64\\vc12\\lib",
"E:\\pdf_parse\\HIK_QR_Locate\\demo",
"E:\\pdf_parse\\HIK_QR_Locate\\HIK_QRL_src"
],
# 注意没有.lib后缀
libraries=[
"opencv_world310",
"kernel32",
"user32",
"gdi32",
"winspool",
"comdlg32",
"advapi32",
"shell32",
"ole32",
"oleaut32",
"uuid",
"odbc32",
"odbccp32",
"HIK_QRL_src"]
)
setup (name = 'huizi_loc',
version = '0.1',
author = "xu",
description = """huizi_loc""",
ext_modules = [huiuzi_module],
py_modules = ["huizi_loc"],
)
CMD运行
swig -c++ -python huizi_loc.i
此处我用的是anaconda的python,build如下:
D:\Anaconda\python.exe setup.py build_ext --inplace
打印:
正在生成代码
已完成代码的生成
说明成功
在我anaconda下
D:\Anaconda\python.exe
import huizi_loc
a=huizi_loc.huizi_loc(r"E:\pdf_parse\python\res1-photo.jpg")
a.x1
完成
如果要在别的地方用,请带走生成的
huizi_loc.pyc
_huizi_loc.pyd
两个文件,即为可用python导入的文件