c++调用python函数画2d图像

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)

编译运行

在这里插入图片描述

发布了34 篇原创文章 · 获赞 2 · 访问量 2325

猜你喜欢

转载自blog.csdn.net/weixin_44088559/article/details/105198550