opencv cmake時如何正確識別pyhon庫

前言

在上一篇博客(https://blog.csdn.net/avideointerfaces/article/details/104830723)中有講解,如果想要在python中正確的import我們自己編譯的opencv版本,就必須在opencv cmake時指定/識別好python庫,python可執行文件等。 只有這樣,才能在python中import cv2後打印出想要的opencv版本號。

但是 要在cmake時正確的識別出python庫沒有想象的那麼容易。 這裏以python3爲例,說說我自己遇到的坑。

過程

剛開始在cmake結果中,能看到python3 interpreter爲/usr/bin/python3.6,但是其Libraries的值始終爲No,雖然已經在cmake參數已經制定好lib所在路徑。 後來看cmake剛開始的log發現有一個問題如下:

Found PythonInterp: /usr/bin/python3.6 (found suitable version "3.6.8", minimum required is "3.2")-- 
Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS) 
(Required is exact version "3.6.8")

Traceback (most recent call last):  File "<string>", line 1, in <module>ModuleNotFoundError: 
No module named 'distutils.sysconfig'

應該是沒裝distutils引起的,所以輸入命令:sudo apt-get install python3-distutils 

再次cmake,發現上面的錯誤沒有了,但仍然找不到python lib。

這時,需要把build目錄刪除,然後重新創建它,並輸入cmake xxx命令來從頭開始cmake。這樣就可以找到python lib了,如下所示:

-- Found PythonInterp: /usr/bin/python3.6 (found suitable version "3.6.8", minimum required is "3.2")-- 
Found PythonLibs: /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 
(Required is exact version "3.6.8")

 此外,如果numpy include目錄找不到,就要考慮 python3的numpy是否沒有安裝。 

最後在cmake結果裏面能看到類似值,就說明python庫等在opencv裏面識別成功。

強調一點,最後一項install path是指opencv python編譯出來的結果所在目錄。前面3項都設對了,後面這項值自然會出來。 

最後就是編譯opencv源代碼了,在編譯過程中可能會遇到下面的錯誤:

opencv-4.1.0/modules/python/src2/cv2.cpp:9:10: 
fatal error: Python.h: 
No such file or directory #include <Python.h>

其解決辦法是:sudo apt install python3.6-dev。注意python後面需要帶相應版本號。 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章