如何安装请详见上文
【PyBind11+anaconda+opencv+windows11+cmake+wsl+vscode】从入门到跑通 。构建基于opencv c++的python接口_子韵如初的博客-CSDN博客w不需要安装啥x11 、 xming直接mobxterm可以搞定点击右上角的X server打开可视化服务器然后 apt install x11-apps -yxclock 搞定从mobxterm可以看到display的端口X11显示可视化的原理是就是通过X协议,类似于http对linux于windows上进行通信 。那么他们通信的ip地址就是这个DISPLAY=localhost:10.0比如一个XClinet要在屏幕 上输出一个圆,X应用程序只负责...https://blog.csdn.net/weixin_43953700/article/details/123760942计算机视觉-Paper&Code - 知乎V100 is all u needhttps://www.zhihu.com/column/c_1488286320929333249
第一步: 首先在C/C++ IDE中编写C/C++函数,然后采用pybind11封装为python可调用的包装函数, 之后采用C/C++编译器编译器生成.pyd文件
第二步:将生成的.pyd文件复制到python工程中,之后作为python module import导入使用
存在的问题 不同操作系统下直接调用生成的pyd可能会出错,不能跨平台调用
在上述过程中,pyd动态链接库的生成是在本地PC上,但是如果想在不同的操作系统、硬件平台上调用之前生成的pyd,显然是会出错的 。比如在windows上编译生成了一个python扩展.pyd, 但是Ubuntu系统想调用这个python扩展就不行了 。
解决方案 为了使得C/C++创建的python扩展可以跨平台使用,那么最简单的办法就是直接发布源码, 然后在该操作系统、硬件平台上编译生成python扩展 。
因此本节内容利用python setuptools 方式实现
首先配置cmake编译不依赖外部工程链接 ex.cpp
#include#include#include
setup.py使用pip安装install,生成numpy_demo.cpython-38-x86_64-linux-gnu.so
python setup.py build_ext --inplacebuild_ext: 给python编译一个c、c++的拓展-–inplace: 忽略build-lib,将编译后的扩展放到源目录中,与纯Python模块放在一起 from setuptools import setupfrom setuptools import Extensionexample_module = Extension(name='numpy_demo',# 模块名称sources=['ex.cpp'],# 源码include_dirs=[r'/root/anaconda3/envs/py3/lib/python3.8/site-packages/pybind11/include'])setup(ext_modules=[example_module])# build_ext:build C/C++ extensions (compile/link to build directory),给python编译一个c、c++的拓展# –inplace:ignore build-lib and put compiled extensions into the source directory alongside your pure Python modules,忽略build-lib,将编译后的扩展放到源目录中,与纯Python模块放在一起# python setup.py build_ext --inplace test.py测试
import numpy as npimport numpy_demo from numpy_demo import Matrixres = numpy_demo.save_2d_numpy_array(np.zeros(shape=[4,7], dtype=np.float32), './data.dat')print(Matrix.__dict__)print(Matrix)
如果需要引用opencv怎么做 上面c++的拓展,只是使用了pybind11
因此继续编辑c++代码
main.cpp
#include wrapper.h
#ifndef WRAPPER_H_#include
wrapper.?????cpp
#include"wrapper.h"#include cv::Mat numpy_uint8_1c_to_cv_mat(py::array_t 【【PyBind11+anaconda+opencv+windows11+cmake+wsl+vscode】从入门到跑通。构建基于opencv c++的python package】setup.py
其中需要注意的是
- include_dirs:指定pybind11,和opencv include的路径
- library_dirs:指定使用的动态库,静态库的路径
- libraries:指定使用的库名称,原文章是将opencv编译成了opencv_world库的
from setuptools import Extensionfrom setuptools import setup__version__ = '0.0.1'# 扩展模块ext_module = Extension(# 模块名称name='cv_demo1',# 源码sources=[r'wrapper.cpp', r'main.cpp'],# 包含头文件include_dirs=[r'/usr/local/include',r'/root/anaconda3/envs/py3/lib/python3.8/site-packages/pybind11/include' ],# 库目录library_dirs=[r'/usr/local/lib'],# 链接库文件libraries=[r'opencv_core', r'opencv_imgproc'],language='c++')setup(name='cv_demo1',description='A simaple demo',ext_modules=[ext_module],install_requires=['numpy']) python setup.py build_ext --inplace编辑成so文件,编写test.py查看结果test.py
import cv_demo1 as cv_demoimport numpy as npimport cv2import matplotlib.pyplot as plt# help(cv_demo)image = cv2.imread('./8.jpg', cv2.IMREAD_GRAYSCALE)# rgb to grayplt.figure('rgb->gray')img_gray = cv_demo.test_rgb_to_gray1(cv2.imread('./8.jpg'))plt.imshow(img_gray)plt.show()总体代码结构如下
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
