有时常常遇到两种语言切换的问题,比如在C++中实现了一个图像处理算法,将其封装为一个函数,该函数的输入输出类型为OpenCV中常用的类型如cv::Mat等,需要在Python中调用,这时可以愉快地利用OpenCV生成Python包的方法。
原理
利用OpenCV生成Python包的原理,将我们写的C++程序编译成Python包(本文介绍的是在Windows环境下,使用VS,Python 64位,其他环境按需修改即可,主要是几个文件)
原理参考 How OpenCV-Python Bindings Works?
参考learnopencv,本文介绍了cv2.cpp
的修改方法,与参考有些区别,改动少一些
配置方法
环境注意事项
- Python位数,和使用的VS编译器位数要相同,本文测试的都是64位
- 本文介绍的OpenCV版本是4.0.1,其他版本按需修改(主要是几个文件,支持生成Python包的OpenCV版本应该都是可以的)
配置步骤
-
将
cv2.cpp
,pycompat.hpp
,gen2.py
,hdr_parser.py
这几个文件从OpenCV源码中拷贝出来,大致路径在moudules/python/src
-
目录结构(要新建的后文介绍)
--cv2.cpp
--pycompat.hpp
--gen2.py
--hdr_parser.py
--headers.txt
--src
----pycvtest.h
----pycvtest.cpp
--pycvtest
pycvtest.h
中写这些,注意命名空间必须使用cv,减少后续工作量,注意不要直接导入opencv.hpp
,因为它导入了大量的库,如果不需要不用导入,按需修改,本例中只是用了core.hpp
用来展示
#pragma once
//#include <opencv.hpp>
#include <opencv2/core.hpp>
namespace cv {
CV_EXPORTS_W void add_one_for_test(cv::InputArray t_in, cv::OutputArray t_out)