ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python调用C++之pybind11保姆级教学

2021-07-13 10:29:48  阅读:407  来源: 互联网

标签:Capture cmake python C++ 文件夹 pybind11 Release


一、环境及配置

win10、cmake 3.15.0-rc3、vs2019、pycharm2021专业版

二、具体操作

1.cmake编译前的准备操作

新建一个文件夹(这里为send)存放我们的所有文件,包括我们项目需要的所有cpp和h文件、从GitHub上下载的pybind11文件夹(下载链接:https://github.com/pybind/pybind11)、新建一个Release文件夹用来存放cmake自动生成的所有文件、新建一个CMakeLists文本文档,内容如下:

cmake_minimum_required(VERSION 3.15.0)
project(Camera_Capture) //这个是cmake编译后的工程名,可以自己定义

add_subdirectory(pybind11)
pybind11_add_module(Camera_Capture main.cpp CameraDS.cpp CameraDS.h) //括号内第一个为工程名,和上面一样,后面包含我们需要的所有文件

在main.cpp文件里我们可以将我们要在python里调用的功能封装成一个个函数,如下所示:

void get_frame()
{
	//获取一帧
	IplImage *pFrame = camera.QueryFrame();
	cvShowImage("camera", pFrame);
	cvWaitKey(20);
	Save_img = pFrame;
}

//module名和cmakelists里的工程名一致,上面函数在下面要重新声明如下
PYBIND11_MODULE(Camera_Capture, m) {
	m.doc() = "pybind11 example plugin"; 

	m.def("get_frame", &get_frame, "A function which Main,main(1)");
} //函数名写两遍

2.cmake编译以及VS设置

文件夹选择如下,编译器版本和电脑操作系统的位数(一般都是64位)

 Configure成功后出现如下界面,再点击Generate

 Release文件夹里出现了许多文件,其中一个为cmakelists里我们命名的工程文件,打开该工程(这里为Camer_Capture.sln),将vs调成Release模式,配置好需要的环境确保工程里没有报错,将Camera_Capture设为首选项,生成解决方案,如果成功会生成一个pyd文件如下所示:

3.pycharm设置

在pycharm下打开我们需要调用c++功能的python项目,点击File——Settings——Project——Python interpreter——点击右上角小齿轮(Show all)——选择当前python的编译环境——点击小图标最后一个(Show paths for the selected interpreter)——把我们刚才新建的Release文件夹下又生成的Release文件夹包含进来,如下图所示:

最后在python项目中import该模块就能调用c++里写好的功能了,如图所示:

 

 文中有不够详细的地方欢迎各位与我交流。

 

标签:Capture,cmake,python,C++,文件夹,pybind11,Release
来源: https://blog.csdn.net/TaylorNY/article/details/118686159

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有