python程序 plot1.py
#coding=utf-8
import matplotlib.pyplot as plt
import numpy as np
def plot():
x = np.arange(-5, 5, 0.02)
y = np.sin(x)
plt.axis([-np.pi, np.pi, -2, 2])
plt.plot(x, y, color="r", linestyle="-", linewidth=1)
plt.show()
C++程序 c++_python.cpp
#include <iostream>
#include <Python.h>
using namespace std;
int main(int)
{
Py_Initialize();//-初始化python解释器
if(!Py_IsInitialized())
{
PyRun_SimpleString("print 'inital error!' ");
return -1;
}
PyRun_SimpleString("print 'inital ok!' ");
PyRun_SimpleString("import sys");//--相当于python中的import sys语句,sys是和解释器打交道的
PyRun_SimpleString("sys.path.append('./')"); //指定pytest.py所在的目录
PyRun_SimpleString("sys.argv = ['python.py']");
PyObject *pName =NULL;
PyObject *pMoudle = NULL;//--存储要调用的python模块
PyObject *pFunc = NULL;//--存储要调用的函数
pName = PyString_FromString("plot1"); //指定要导入的文件名
pMoudle = PyImport_Import(pName);//--利用导入文件函数将helloWorld.py函数导入
if(pMoudle == NULL)
{
PyRun_SimpleString("print 'PyImport_Import error!' ");
return -1;
}
pFunc = PyObject_GetAttrString(pMoudle,"plot");//--是在python引用模块helloWorld.py中查找hello函数
PyObject_CallObject(pFunc,NULL);//--调用hello函数
Py_Finalize();//--清理python环境释放资源
return 0;
}
注意:要想画图成功 必须加上:
PyRun_SimpleString(“sys.argv = [‘python.py’]”);
具体是为什么,我暂时没研究,以后有时间研究一下。有懂的大神可以评论知道一下,小弟这里 ORZ
编写CMakeLists
cmake_minimum_required(VERSION 3.1)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
project(plot_project)
#添加头文件搜索路径
include_directories(/usr/include/python2.7)#添加头文件目录,相当于g++ -I参数
link_directories(/usr/include/python2.7)#动态链接库或静态链接库的搜索路径,相当于gcc的-L参数
set(OpenCV_DIR /home/xiaoyuer/myopencv/opencv)
#寻找依赖功能包
find_package(OpenCV REQUIRED)
#add_executable(1 1.cpp)
add_executable(c++_python c++_python.cpp)
#添加需要链接的共享库
#target_link_libraries(1 PRIVATE ${OpenCV_LIBS} python2.7) #添加链接库,相同于指定gcc -l参数
target_link_libraries(c++_python PRIVATE ${OpenCV_LIBS} python2.7)