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