使用开源代码完成 Python numpy.ndarray 转 C++ cv::Mat

前言

本文解决了上一篇文章中的接口问题(cv::Mat to numpy.ndarray),使用的工具是github上Gregory Kramida的一个项目pyboostcvconverter。关于该项目的介绍和使用方式在其Readme中有详细的介绍,因此本文主要介绍使用过程中会出现的若干问题和解决办法。


问题

1. cmake-gui 路径设置

在Readme中,作者Gregory Kramida建议使用cmake-gui进行编译链接,设置的主要是boost和Python的路径,以下为笔者设置的路径

OpenCV_Dir 		                	/usr/local/share/OpenCV
PYTHON_Desire_version		        3.X

Boost_include_dir 	            	/usr/include
Boost_Library_dir		            /usr/lib
Boost_Python-PY37_Library_xx    	/usr/lib/x86_64-linux-gnu/libboost_python-py37.so
Boost_Python37_Library_xx       	/usr/lib/x86_64-linux-gnu/libboost_python-py37.so

PYTHON3_EXECUTABLE	            	/home/zhantao/anaconda3/bin/python
PYTHON3_INCLUDE		            	/home/zhantao/anaconda3/include/python3.7m
PYTHON3_Library		            	/home/zhantao/anaconda3/lib/libpython3.7m.so
PYTHON3_NUMPY_INCLUDE				/home/zhantao/anaconda3/lib/python3.7/site-packages/numpy/core/include
PYTHON3_PACKAGE_PATH	        	lib/python3.7/site-packages

其中需要注意的问题有:

  • 1 如果在configure时报错:找不到libboost_python-py37,同时通过查找也发现本机确实只安装了相近版本的boost-python库,例如libboost_python-py35,那么可以直接将libboost_python-py35.so复制一份,改名为libboost_python-py37.so。这一操作不影响编译链接结果。(另:Library的路径一定要精确到.so文件)
  • 2 选择Python路径时,要考虑之后这一Python module会在哪一版本的Python下使用(2.x, 3.x),设置对应的版本路径即可。这里由于安装了anaconda,默认Python版本是3.7.1,且之后也在该环境下使用,故所有的Python相关路径都设置到anaconda内,相比在系统内找比较简单。
  • 3 最后需要注意的一点是,cmake-gui可能报找不到Python Interpreter,这一警告的原因是可能只找到了3.x版本的解释器,因此只要不报其他的错并且可以 generate 出来就没问题。

2. 封装完函数后

在添加完用户自己的函数或者类和命名空间后,进行编译链接时需要注意以下几个问题:

  • 1 由于整个程序只是生成一个库文件,因此编译器链接器不会对一些变量是否被定义进行检查。如果某些函数所使用的库没有被包含在CMakeLists文件的find_package语句中,虽然编译链接没有问题,但是使用该库时会出现:undefined symbol: _2N2Qmdxxxxxx 的报错。
    ——解决方法: 核对使用的库并添加到CMakeLists中,例如 find_package(OpenCV COMPONENTS core imgproc highgui REQUIRED)
  • 2 将生成的库文件(.so)复制到使用的Python文件夹下 site-packages 文件夹中,然后即可在Python中import定义的函数或类。
  • 3 最后一个问题是使用IDE时注意选择build的类型,如果已经完成了代码的检查和确认,建议使用release的build类型,否则生成的库文件将很大,Python调用时也会非常慢。在命令行中可以通过使用 -O3 等参数要求编译器自动优化。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值