c++調用python腳本

之前是純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文件

   


           

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章