您的位置:首页 > 编程语言 > C语言/C++

c++调用python脚本

2018-02-01 10:32 357 查看
之前是纯python脚本在跑一些功能,就当时在用matlab做图像处理,做做实验还可以。上到项目还是要用C++,

但python里面的一些功能代码又不想再用C++代码再实现一遍,故用C++来调用一些python脚本。长久之计还是

完全用C++代码实现吧。

下面介绍下相关配置吧:

1.用VS2013新建一个控制台程序,选择Release X64配置



2.sample1.cpp里代码如下:

// sample1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "python.h"
#include <iostream>
#include <Windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
char msg[256] = "11111 ";

PyObject * pModule = NULL;
PyObject * pFunc = NULL;
PyObject * pArg = NULL;

// 初始化python环境
Py_Initialize();

// 导入python脚本
pModule = PyImport_ImportModule("TensorflowTest");
if (!pModule) {
OutputDebugStringA("1 cannot open module!");
Py_Finalize();
return 1;
}

// 获得TensorFlow函数指针
pFunc = PyObject_GetAttrString(pModule, "HelloTensor");
if (!pFunc) {
OutputDebugStringA("2 cannot find function!");
Py_Finalize();
return 1;
}

// 调用TensorFlow函数
pArg = Py_BuildValue("(s)", "this is a call from c++");
if (pModule != NULL) {
PyEval_CallObject(pFunc, pArg);
}

Py_Finalize();

OutputDebugStringA("3 exit!");
return 0;
}
3.工程路径配置

   (1)Configuration Properties属性里的VC++ Directories里为:

            C:\Program Files\Anaconda3\Scripts

            C:\Program Files\Anaconda3\include

  (2)Lineker里的General的Additional Library Directories里为:(为python的路径,我装的是Anaconda3(64-bit))

           C:\Program Files\Anaconda3\libs

           C:\Program Files\Anaconda3\Lib

   (3)Lineker里的Input的Additional Dependencies里为:

             python35.lib

4.编译该工程,转到生成的Release文件夹下

    在该文件夹下新建一份TensorflowTest.py文件,代码如下:

    

#!/usr/bin/python3.5
# -*- coding: utf-8 -*-

import sys
import tensorflow as tf
import os
import cv2
import numpy as np
import sys
import pickle
from optparse import OptionParser
import time
from skimage.io import imsave, imread, imshow

def HelloTensor(s):
print("me")
data = imread("D:\\4.png")
imsave("4.bmp",data)
stdout_backup = sys.stdout
log_file = open("log.txt", "w")
sys.stdout = log_file
print(s)

hello = tf.constant('Hello, Ten1sorFlow!')
sess = tf.Session()
print(sess.run(hello))

log_file.close()
sys.stdout = stdout_backup
该python中import了一些库,如果你没有安装pip安装这些库,可以注释掉这些代码。同时拷贝python35.dll到该目录下。

5.重新生成该c++工程 

   会在Release目录下生成一个log.txt文件和保存的bmp文件

   


           
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: