一、简介
- 这篇博客是之前博客在ubuntu中,交叉编译harfbuzz,freetype,opencv(包括WITH_QT),并移植到linux开发板的续写。之前交叉编译opencv时,没有添加python支持,只是交叉编译了c++版本的opencv。
- arm-linux开发板python交叉编译可以参考博客:在ubuntu中,基于Qt平台,调用python文件,交叉编译到嵌入式linux开发板上运行。
- 因为python支持的opencv需要用到numpy库。交叉编译python第三方库numpy,可以参考博客:嵌入式linux开发板,通过crossenv交叉编译python第三方库numpy。
二、编译过程
- 首先添加BUILD_opencv_python3。
- 然后在cmake中添加交叉编译的python的相关路径。这里我交叉编译的python版本是python3.6。注意删除cmake自带的python2的相关路径。
- 点击Configure按钮。
这里出现问题:没有识别到python的Libraries和install path。
- 通过阅读opencv中python3的CMakeLists.txt找到原因:
cd /home/book/opencvarm/opencv-4.5.5/modules/python/python3
vi CMakeLists.txt
说明:添加python3的include路径不是使用PYTHON3_ INCLUDE_ DIR,应该使用PYTHON3 INCLUDE PATH。所以添加PYTHON3 INCLUDE PATH。
- 而对于python3的lib
cd /home/book/opencvarm/opencv-4.5.5/modules/python
vi common.cmake
可以看到应该使用PYTHON3 LIBRARIES,而不是PYTHON3 LIBRARY。所以添加PYTHON3 LIBRARIES。
- 再次Configure,识别成功。
-
另外,在make时会出现 /home/book/arm-python/bin/python3.6m: Exec format error的错误。因为这里/bin/python3执行文件是arm架构的,但是我们是在ubuntu上进行操作,所以应该换成x86_64架构的python3执行文件。所以这里换成你ubuntu上的python3执行文件即可。查找python3路径,使用命令:
which python3
。 -
结果
cd /home/book/opencvarm/opencv-4.5.5/tmp/lib/python3.6/site-packages/cv2/python-3.6