当前位置: 首页 > news >正文

商派商城网站建设影视手机app制作教程

商派商城网站建设,影视手机app制作教程,网页美工设计实训报告,网站建设的感想与建议目录 0、前言1、安装 pybind11库c侧python侧 2、C引入bybind11vs增加相关依赖及设置cpp中添加头文件及导出模块cpp中添加numpy相关数据结构的接收和返回编译生成dll后改成导出模块同名文件的.pyd 3、python调用c4、C引入bybind11 0、前言 在当今的计算机视觉和机器学习领域&am…

目录

  • 0、前言
  • 1、安装 pybind11库
    • c++侧
    • python侧
  • 2、C++引入bybind11
    • vs增加相关依赖及设置
    • cpp中添加头文件及导出模块
    • cpp中添加numpy相关数据结构的接收和返回
    • 编译生成dll后改成导出模块同名文件的.pyd
  • 3、python调用c++
  • 4、C++引入bybind11

0、前言

在当今的计算机视觉和机器学习领域,Python 和 C++ 是两种最常用的编程语言。Python 以其简单易学、高效编程和强大的科学计算库而闻名,而 C++ 则以其高效性和强大的计算能力而著称。然而,这两种语言各有优劣,因此将它们结合起来使用可以发挥它们的优点,同时弥补它们的缺点。在本文中,我们将介绍如何在 Windows VS 环境下使用 pybind11 进行 C++ 和 Python 联合编程示例,进行机器视觉和相机位姿优化相关的程序开发。我们将使用 Python 3.7 和 C++,并利用 numpy 数组格式接收 Python 侧的两幅图像,并利用 g2o 进行 BA 优化,最后将优化结果以 numpy 数组形式返回 Python。
在这里插入图片描述

1、安装 pybind11库

首先,我们需要安装 pybind11 库。pybind11 是一个用于将 C++ 代码绑定到 Python 解释器的库,它提供了一种简单的方法来创建 Python 模块,这些模块可以直接调用 C++ 代码。

c++侧

pybind11库是一个纯头文件的库,其实只要从github上下载源码,即可供使用。

git clone https://github.com/pybind/pybind11.git

在这里插入图片描述

python侧

python侧,可以进入conda虚拟环境,注意需要3.7版本的python,直接pip安装:

pip install pybind11

在这里插入图片描述

2、C++引入bybind11

安装 pybind11 库后,我们可以开始编写 C++ 代码。以g2o ba为例,我们将上篇博文中的c++代码进行稍加改造,开个python的调用“接口”即可:

vs增加相关依赖及设置

使用bybind11,需要将下载的头文件路径引入项目,同时,需要将python3.7的头文件路径及lib引入及链接进项目。
(1)头文件路径加入:
在这里插入图片描述
(2)python3.7的lib加入:
在这里插入图片描述
(3)生成动态库dll类型:
在这里插入图片描述

cpp中添加头文件及导出模块

在c++程序中去掉main函数,添加头文件,及导出模块设置:
在这里插入图片描述

在这里插入图片描述
如上两图,在常规c++文件中首位加入头文件和导出模块定义,我们这次导出的是ab这个函数,ab是将上篇博文的main函数改成的。

cpp中添加numpy相关数据结构的接收和返回

// 将Python中的图像传递给C++进行处理
py::array_t<double> ab(py::array_t<uint8_t> &imge1, py::array_t<uint8_t> &imge2){//创建全0 numpy数组py::array_t<double> output_array({3,4});auto buf = output_array.mutable_data();for (int i = 0; i < 3; i++) {for (int j = 0; j < 4; j++) {buf[i * 4 + j] = 0;}}// 将输入图像转换为OpenCV的Mat对象auto bufimg1 = imge1.request();auto bufimg2 = imge2.request();int type = CV_8UC3;int channels = 3;if (bufimg1.ndim == 3) {channels = bufimg1.shape[2];if (channels == 4) {type = CV_8UC4;}}//如果不是3或4通道则退出if (channels != 3 && channels != 4) {return output_array;}cv::Mat img1(bufimg1.shape[0], bufimg1.shape[1], type, bufimg1.ptr);cv::Mat img2(bufimg2.shape[0], bufimg2.shape[1], type, bufimg2.ptr);

如上,我们ab函数,可以接收来自python的图像numpy数组,并将图像转化为了cv::mat格式,交给c++后续处理。最后返回numpy形式的g2o优化后的位姿数组:

g2o::VertexSE3Expmap* v = dynamic_cast<g2o::VertexSE3Expmap*>(optimizer.vertex(1));Eigen::Isometry3d pose = v->estimate();// 获取输出数组的指针auto output_ptr = output_array.mutable_data();// 将isometry的旋转矩阵和平移向量存储在numpy数组中Eigen::Map<Eigen::Matrix<double, 3, 4, Eigen::RowMajor>> result_map(output_ptr);result_map.block<3, 3>(0, 0) = pose.rotation().matrix();result_map.block<3, 1>(0, 3) = pose.translation();return  output_array;

编译生成dll后改成导出模块同名文件的.pyd

在这里插入图片描述
在这里插入图片描述
将生成的dll改成g2opy.pyd
在这里插入图片描述

3、python调用c++

进入与c++依赖的同一个python环境,然后编辑简单的调用程序:
在这里插入图片描述
两帧图像送入c++,优化计算后返回输出:

在这里插入图片描述

本篇所有源码已上传,链接如下:
python实现C++程序g2o的ba优化模块调用,python侧的程序资源
本资源为python和C++联合编程的示例vs工程源码

4、C++引入bybind11

通过本文的示例,我们验证了如何在 Windows VS 环境下使用 pybind11 进行 C++ 和 Python 联合编程的可行性,可进一步进行机器视觉和相机位姿优化相关的程序开发。
有了C++的加持,python的机器人开发在性能上或者是解决方案上,又有了更多的可选项。可以发挥python的更大威力了,keep go on!

http://www.yayakq.cn/news/917610/

相关文章:

  • 湖北省市政工程建设官方网站电子商务网站分析
  • 文山网站建设网页搜索青少年普法网官网
  • 深圳市住房建设与保障局官方网站做个app需要多少费用
  • 网站建设 策划方案书网络公司名字免费起名大全
  • 单页网站做cpa湖南省郴州市旅游景点介绍
  • 网站做多少屏合适招聘门户网站是什么意思
  • 电商网站产品模块哈尔滨建设鞋城
  • 烟台网站推广南宁网站推广哪家好
  • 鲜花培训网站建设长春关键词优化平台
  • 福州网站关键词推广免费永久网站空间
  • wordpress做管理网站蒙阴哪有做淘宝网站的
  • 怎样清理网站后门暖爱免费观看高清视频
  • 济南网站建设哪家强网站备份和备案的区别
  • 免费设计logo网站有哪些软件开发哪里学好
  • 广州网站推广找哪家喜来健cms系统
  • 淘宝做网站被骗中国建设人才网官网查询
  • 文化旅游做的好的网站桂林网站制作推荐
  • 怎样做网站广告泰安专业网站开发公司
  • 上海网站推广广告如何构建大型网站架构
  • 株洲网站建设团队张槎网站设计
  • 做网站的服务器多少钱一年广州珠江工程建设监理有限公司网站
  • 网页设计好看的网站梅州网站制作
  • php 网站cookie沈阳网络推广培训
  • 网站是先解析后备案吗网站建设需要哪些流程
  • ps制作网站模板天津招聘网人才招聘官网
  • centos建设网站保山做网站
  • 网站建设新闻发布注意创网址
  • 网站后台和前台开设赌场罪 网站开发
  • 公司网站制作应该注意些什么手机网站 link和visited设置同一种颜色失效
  • 朝阳改版网站网页文档