利用SWIG将c++编译成python可调用的包

利用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导入的文件

目录

猜你喜欢

转载自blog.csdn.net/CatkinLX/article/details/81304190