cmake編譯opencv指南
- cmake編譯opencv指南
- 用包管理器安裝
- 編譯安裝
- opencv4.1.1 Ubuntu16.04 編譯:
- opencv 3.1.0 windows 3rdparty下載
- OpenCV 3.1 VS2017編譯后沒法被find_pacakge()識別
- 使用OpenCV Windows預編譯包提供的Python接口(cv2)
- 指定需要編譯的模塊(modules)
- recursion is detected during loading of "cv2" binary extensions
用包管理器安裝
比如ubuntu下是apt-get,mac下是brew。(windows下或許用nuget?)以ubuntu下為例。
查看opencv相關的包
aptitude search opencv
執行安裝
發現有很多包。不妨安裝絕大多數:
sudo apt-get install libopencv-*
sudo apt-get install opencv-data python-opencv
編譯安裝
帶cuda支持的編譯安裝
需要在cmake階段設置-DWITH_CUDA=ON才會編譯cuda支持的代碼。同時建議指定CUDA_ARCH_BIN為自己顯卡計算能力(compute capability)的數值,否則會把所有算力架構都編譯,很慢。
獲取算力:
cd ~/work
git clone https://github.com/zchrissirhcz/check_ComputeCapability
cd check_ComputeCapability
make # 可以用cmake那一套
例如我是1080Ti,顯卡算力6.1,則指定-DWITH_CUDA=ON -DCUDA_ARCH_BIN=6.1
ref: 編譯帶 CUDA 模塊的 OpenCV(解決編譯速度慢)
Python.h找不到
/home/zz/work/opencv-3.4.11/modules/python/src2/cv2.cpp:17:10: fatal error: Python.h: 沒有那個文件或目錄
原因:cmake階段指定python頭文件搜索路徑時,路徑寫錯了。
OpenCV 3.4.11 CUDA版本 ubuntu 20.04 編譯記錄
編譯cuda版本的opencv,需要cmake階段指定如下三個參數:
-D WITH_CUDA=ON #必須
-D OPENCV_EXTRA_MODULES_PATH=xxx/opencv_contrib/modules #必須
-D CUDA_ARCH_BIN=x.y #建議
也就是說,contrib模塊也需要的。
同時還需要注意,opencv和opencv_contrib的版本必須一一對應:例如同時使用3.4.11。
compile.sh:
#!/bin/bash
set -x
set -e
rm -rf build
mkdir -p build
cd build
LOG="../cmake.log"
touch $LOG
rm $LOG
exec &> >(tee -a "$LOG")
cmake .. \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/home/zz/soft/opencv-3.4.11 \
-D WITH_CUDA=ON \
-D CUDA_ARCH_BIN=6.1 \
-D OPENCV_EXTRA_MODULES_PATH=/home/zz/work/opencv_contrib-3.4.11/modules \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_PYTHON3_VERSION=3.8 \
-D PYTHON3_EXECUTABLE=/home/zz/soft/miniconda3/bin/python \
-D PYTHON3_INCLUDE_DIR=/home/zz/soft/miniconda3/include/python3.8 \
-D PYTHON3_LIBRARY=/home/zz/soft/miniconda3/lib/libpython3.8.so \
-D BUILD_opencv_python3=ON \
-D BUILD_opencv_python2=OFF \
-D PYTHON_DEFAULT_EXECUTABLE=/home/zz/soft/miniconda3/bin/python \
-D HAVE_opencv_python3=ON \
-D BUILD_TIFF=ON \
-D WITH_VTK=OFF \
-D WITH_MATLAB=OFF \
-D BUILD_DOCS=OFF \
make -j4
ubuntu16.04源碼編譯opencv4.1.0+python3(miniconda/anaconda)
目前(2019年11月18日)我用python都是用miniconda里的python,考慮到python2在2020年會不再維護,直接用python3了。具體版本是python3.7,安裝在了/home/zz/soft/miniconda3。
anaconda與miniconda除了預裝包不同,其他可以說都一樣。
opencv用的4.1.0,目測opencv3.4.x系列也差不多的情況:需要指定"PYTHON3_"開頭的各種cmake選項。
cd ~/work
git clone opencv opencv-4.1
cd opencv-4.1
git pull
git checkout -b 4.1.0 4.1.0 #tag 4.1.0
mkdir build
cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/opencv-4.1 \
-DINSTALL_PYTHON_EXAMPLES=ON \
-DOPENCV_PYTHON3_VERSION=3.7 \
-DPYTHON3_EXECUTABLE=/home/zz/soft/miniconda3/bin/python \
-DPYTHON3_INCLUDE_DIR=/home/zz/soft/miniconda3/include/python3.7m \
-DPYTHON3_LIBRARY=/home/zz/soft/miniconda3/lib/libpython3.7m.so \
-DBUILD_opencv_python3=ON \
-DBUILD_opencv_python2=OFF \
-DPYTHON_DEFAULT_EXECUTABLE=/home/zz/soft/miniconda3/bin/python \
-DHAVE_opencv_python3=ON \
-DBUILD_TIFF=ON
make -j8
sudo make install
(BUILD_TIFF是為了防止編譯Caffe時報錯提示"對‘TIFFReadDirectory@LIBTIFF_4.0’未定義的引用")
本來以為上面這樣之后,就可以用了。C/C++的是可以了,但是python的import cv2會提示:
error: recursion is detected during loading of "cv2" binary extensions
原因是目前的opencv中python加載有bug。參考:https://github.com/opencv/opencv/issues/13202
具體解決辦法:
cd ~/work/opencv-4.1/build/python_loader
python setup.py develop

為什么編譯安裝
opencv有些功能放在opencv_contrib中了,即便用包管理器安裝了opencv_contrib,有些包還是不能用,一定要自行把opencv和opencv_contrib一起編譯。
下載源碼
依然以ubuntu16.04為例。
到opencv官網下載。或者用git:
mkdir -p ~/gitwhat #自行建立的目錄
cd ~/gitwhat
git clone https://github.com/opencv/opencv --depth=1 #depth表示只下載最新commit的代碼,減少下載量。
git clone https://github.com/opencv/opencv_contrib --depth=1
cd opencv
vim compile.sh #cmake編譯參數很多,寫到文件中方便些
如果這里要切換版本,那么執行git的切換分支即可。比如指定3.4版:
git branch #查看本地分支,發現之后一個master分支
git branch -r #查看遠程分支,發現有個origin/3.4
git checkout -b 3.4 origin/3.4 #切換到遠程分支,並且本地分支起名為3.4
對於opencv_contrib也可以這么切換,只不過opencv有2.4版,opencv_contrib沒有2.4版
編譯腳本
Linux(例如Ubuntu16.04)下,cmake編譯腳本compile.sh內容如下:
#!/bin/bash
set -x
set -e
rm -rf build
mkdir -p build
cd build
LOG="../cmake.log"
touch $LOG
rm $LOG
exec &> >(tee -a "$LOG")
cmake \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv-git-master \
-D WITH_CUDA=OFF \
-D WITH_VTK=OFF \
-D WITH_MATLAB=OFF \
-D BUILD_DOCS=ON \
-D OPENCV_EXTRA_MODULES_PATH=/home/chris/work/gitwhat/opencv_contrib/modules \
-D PYTHON2_EXECUTABLE=/usr/bin/python \
-D PYTHON3_EXECUTABLE=/usr/bin/python3 \
-D PYTHON_INCLUDE_DIR=/usr/include/python2.7 \
-D PYTHON_INCLUDE_DIR2=/usr/include/x86_64-linux-gnu/python2.7 \
-D PYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython2.7.so \
-D PYTHON2_NUMPY_INCLUDE_DIRS=/usr/lib/python2.7/dist-packages/numpy/core/include/ \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3.5/dist-packages/numpy/core/include/ \
..
make -j8
make doxygen # 可選,用來編譯出documentation,存放在`<opencv_root>/build/doc/doxygen/html`
sudo make install #可選,強烈建議執行。
其中,CMAKE_INSTALL_PREFIX表示make install的安裝路徑,可修改;OPENCV_EXTRA_MODULES_PATH是opencv_contrib項目下的modules目錄,自行修改。
make install是把opencv和opencv_contrib進行安裝到一個統一的目錄,如果后續用opencv的C++接口那么當寫CMakeLists.txt時需要這個安裝路徑;如果僅僅是python opencv調用 ,那么只需要找到cv2.so就可以用了,可以不make install
Windows下CMake編譯腳本為:
cmake ^
-G "NMake Makefiles" ^
-D CMAKE_BUILD_TYPE=Release ^
-D CMAKE_INSTALL_PREFIX=%cd%/install ^
-D WITH_CUDA=OFF ^
-D WITH_VTK=OFF ^
-D WITH_MATLAB=OFF ^
-D BUILD_DOCS=ON ^
-D OPENCV_EXTRA_MODULES_PATH=D:/lib/opencv_contrib/modules ^
-D PYTHON2_EXECUTABLE=D:/soft/Anaconda2/python.exe ^
-D PYTHON_INCLUDE_DIR=D:/soft/Anaconda2/include ^
-D PYTHON_LIBRARY=D:/soft/Anaconda2/libs/python27.lib ^
-D PYTHON2_NUMPY_INCLUDE_DIRS=D:/soft/Anaconda2/Lib/site-packages/numpy/core/include ^
..
其中python使用anaconda安裝,並且手動刪除Anaconda2\Lib\site-packages\numpy目錄,從這里下載64位numpy(例如numpy‑1.15.0+mkl‑cp27‑cp27m‑win_amd64.whl),手動解壓並放置到Anaconda2\\Lib\site-packages目錄。
執行編譯腳本、解決3rdparty下載
執行編譯腳本:
chmod +x compile.sh
./compile.sh
發現往往卡在ippicv等第三方包的下載上(國內網絡你懂得)。通過查看相關的.cmake文件,發現是從github上的opencv_3rdparty項目下載的,這些下載地址有些需要改掉,下載第三方包后根據.cmake文件內容,重新壓縮、修改md5的hash值等。
這些下載的包放到<opencv_root>/.cache目錄下,並按照固定的規則命名。
以下是細節:
設定代理
turn_on_proxy.bat
@echo off
echo 開始設置IE代理上網
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /d "http=127.0.0.1:63631;https=127.0.0.1:63631" /f
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyOverride /t REG_SZ /d "<-loopback>" /f
echo 代理設置完成按任意鍵關閉
pause>nul
turn_off_proxy.bat
@echo off
echo 開始清除IE代理設置
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /d "" /f
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyOverride /f
echo IE代理清楚完成按任意鍵關閉
pause>nul
如果cmake階段卡在下載依賴包,並且你本機有代理工具,那么用上面的腳本(注意改下端口)。如果僅僅是開啟了lantern的代理和全局代理,cmake下載仍然會失敗(我這里是這樣的)。
也可以考慮嘗試在cmd中設置(我沒試過,猜測應該能管用):
::http proxy
set http_proxy=http://127.0.0.1:8118
set https_proxy=http://127.0.0.1:8118
::或者socks proxy
set http_proxy=socks5://127.0.0.1:1080
set https_proxy=socks5://127.0.0.1:1080
手動下載ippicv包
查看<opencv_root>/3rdparty/ippicv/ippicv.cmake
此文件是要下載指定commit的opencv_3rdparty包的URL地址,並給出了驗證的md5sum值。
URL地址是有問題的,現在(2017.04.15)不能用raw.githutcontent.com開頭形式的URL下載東西了。
換用這個地址:
https://codeload.github.com/opencv/opencv_3rdparty/zip/81a676001ca8075ada498583e4166079e5744668
其中url最后一部分是commit的id
這樣下載完的是zip包,解壓它並壓縮為.tgz格式。算出它的md5sum值。重命名為md5sum-文件名的格式:
1469ff5ced054be500921d2d46278ef4-ippicv_linux_20151201.tgz
移動到<opencv_root>/.cache/ippicv目錄下
手動下載protobuf包
查看opencv_contrib/modules/dnn/cmake/OpenCVFindLibProtobuf.cmake
此文件是要下載指定版本的protobuf-cpp。我這里是3.1版本的。它下載地址是:
https://github.com/google/protobuf/releases/download/v3.1.0/
這個地址會轉到aws的地址,所以用迅雷下載吧。這個md5sum不用換。
或者下載地址換用這種形式:
https://codeload.github.com/google/protobuf/zip/a428e42072765993ff674fda72863c9f1aa2d268
其中URL最后的commit是protobuf-cpp-3.1對應的commit號。可以試試看。(試了,不行,因該是因為下載的不是protobuf-cpp吧)
xfeatures包
和上面的包的方法類似。只不過放到.cache目錄下后,是把一個個的單個文件進行重命名,格式也是md5sum-文件名,記得對比.cmake文件中的hash值。
.cache目錄結構
➜ .cache git:(master) ✗ tree
.
├── ippicv
│ └── 1469ff5ced054be500921d2d46278ef4-ippicv_linux_20151201.tgz
├── protobuf
│ └── bd5e3eed635a8d32e2b99658633815ef-protobuf-cpp-3.1.0.tar.gz
├── tiny_dnn
│ └── adb1c512e09ca2c7a6faef36f9c53e59-v1.0.0a3.tar.gz
└── xfeatures2d
├── boostdesc
│ ├── 0ae0675534aa318d9668f2a179c2a052-boostdesc_lbgm.i
│ ├── 0ea90e7a8f3f7876d450e4149c97c74f-boostdesc_bgm.i
│ ├── 202e1b3e9fec871b04da31f7f016679f-boostdesc_binboost_064.i
│ ├── 232c966b13651bd0e46a1497b0852191-boostdesc_bgm_bi.i
│ ├── 324426a24fa56ad9c5b8e3e0b3e5303e-boostdesc_bgm_hd.i
│ ├── 98ea99d399965c03d555cef3ea502a0b-boostdesc_binboost_128.i
│ └── e6dcfa9f647779eb1ce446a8d759b6ea-boostdesc_binboost_256.i
└── vgg
├── 151805e03568c9f490a5e3a872777b75-vgg_generated_120.i
├── 7126a5d9a8884ebca5aea5d63d677225-vgg_generated_64.i
├── 7cd47228edec52b6d82f46511af325c5-vgg_generated_80.i
└── e8d0dcd54d1bcfdc29203d011a797179-vgg_generated_48.i
6 directories, 14 files
編譯后的設定-環境變量
新編譯出來的cv2.so位於/usr/local/opencv-git-master/lib/cv2.so
要使用新編譯出來的cv2.so,刪除apt的python-opencv包,或者把cv2.so放到PYTHONPATH中。
sudo apt-get remove python-opencv
sudo ln -sf /usr/local/opencv-git-master/lib/python2.7/dist-packages/cv2.so /usr/lib/python2.7
mac下的compile.sh腳本
mac下裝caffe時候發現,系統自帶的python不靠譜用不了啊,brew的也不怎么能用,所幸有anaconda在。裝好anaconda后再brew從源碼裝boost和boost-python,再caffe。。
對應的opencv編譯腳本,改掉python相關的幾個路徑:
#!/bin/bash
set -x
set -e
LOG="../cmake.log"
touch $LOG
rm $LOG
exec &> >(tee -a "$LOG")
BUILD_ROOT=build
if [ -d $BUILD_ROOT ]; then
rm -rf $BUILD_ROOT
fi
mkdir -p $BUILD_ROOT
cd $BUILD_ROOT
ANACONDA=/Users/tusdk/anaconda
cmake \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv-git-master \
-D WITH_CUDA=OFF \
-D WITH_VTK=OFF \
-D WITH_MATLAB=OFF \
-D BUILD_DOCS=ON \
-D OPENCV_EXTRA_MODULES_PATH=/Users/tusdk/work/opencv_contrib/modules \
-D PYTHON2_EXECUTABLE=${ANACONDA}/bin/python \
-D PYTHON_INCLUDE_DIR=${ANACONDA}/include/python2.7 \
-D PYTHON_LIBRARY=${ANACONDA}/lib/libpython2.7.dylib \
-D PYTHON2_NUMPY_INCLUDE_DIRS=${ANACONDA}/lib/python2.7/site-packages/numpy/core/include/ \
..
make -j8
make doxygen # 可選,用來編譯出documentation,存放在`<opencv_root>/build/doc/doxygen/html`
sudo make install
編譯OpenCV Android庫
- 官方提供下載的opencv android sdk,依賴過多,模塊過多,放手機上app太大了。
- 首先下載安裝ndk,cmake和ninja;
- 下載opencv源碼,這里用opencv-3.4.9和opencv4.2測試OK
- opencv源碼,注意移除modules目錄中絕大多數子目錄,只保留core, imgcodec, imgproc, highgui, photo等必要模塊
- ndk我用的r18b,(可選) 刪除debug編譯參數,縮小二進制體積 android-ndk issue (from ncnn的wiki頁)
# 用編輯器打開 $ANDROID_NDK/build/cmake/android.toolchain.cmake
# 刪除 "-g" 這行
list(APPEND ANDROID_COMPILER_FLAGS
-g
-DANDROID
For example, windows下編譯腳本(arm64-v8a)
@echo off
set BUILD_DIR=arm64-v8a
set ANDROID_NDK=D:/soft/Android/android-ndk-r17c
set ANDROID_SDK=/Users/chris/Library/Android/sdk
if not exist %BUILD_DIR% md %BUILD_DIR%
cd %BUILD_DIR%
cmake -G Ninja ^
-D CMAKE_TOOLCHAIN_FILE=%ANDROID_NDK%/build/cmake/android.toolchain.cmake ^
-D CMAKE_BUILD_TYPE=Release ^
-D CMAKE_INSTALL_PREFIX=%cd%/install ^
-D WITH_CUDA=OFF ^
-D WITH_VTK=OFF ^
-D WITH_MATLAB=OFF ^
-D WITH_FFMPEG=OFF ^
-D BUILD_DOCS=OFF ^
-D WITH_JASPER=OFF ^
-D WITH_TIFF=OFF ^
-D WITH_WEBP=OFF ^
-D WITH_OPENEXR=OFF ^
-D WITH_IMGCODEC_HDR=OFF ^
-D WITH_IMGCODEC_SUNRASTER=OFF ^
-D WITH_IMGCODEC_PXM=OFF ^
-D WITH_IMGCODEC_PFM=OFF ^
-D WITH_QUIRC=OFF ^
-D BUILD_opencv_python3=OFF ^
-D BUILD_opencv_python2=OFF ^
-D OPENCV_PYTHON_SKIP_DETECTION=ON ^
-D WITH_FFMPEG=OFF ^
-D BUILD_JAVA=OFF ^
-D WITH_PROTOBUF=OFF ^
-DBUILD_ANDROID_EXAMPLES=OFF ^
-DINSTALL_ANDROID_EXAMPLES=OFF ^
-DANDROID_ABI='arm64-v8a' ^
-DANDROID_TOOLCHAIN='clang' ^
-DANDROID_PLATFORM_ID='2' ^
-DANDROID_NATIVE_API_LEVEL='21' ^
-DANDROID_STL='c++_static' ^
../..
cd ..
注意:
- 默認會開啟
WITH_CAROTENE選項,這個是在HAL層做加速用的底層庫,例如resize的NEON加速 - 如果是要編armeabi-v7庫,要用
ANDROID_ABI='armeabi-v7a with NEON' - 官方提供的platforms/android/build_setup.py真的忒難用了
查看OpenCV官方CI配置輸出
在OpenCV的PullRequests summary頁面,查看自己感興趣的build,點進去,看cmake的輸出,即可。
例如android 4.3.0 pre版本的:https://pullrequest.opencv.org/buildbot/builders/precommit_windows64/builds/23961
其他問題
opencv_world.so
編譯opencv_contrib時候發現沒有編譯出opencv_world.so
需要cmake開啟開關:
···
-D BUILD_opencv_world=ON
···
缺點:只生成一個opencv_world.so,其他的.so都沒有!
編譯opencv_contrib時報錯Unknown CMake command ‘ocv_download’
問題出現原因:opencv_contrib里面用到的ocv_download函數沒有找到對應的定義。很可能是:你的opencv是下載的.zip/.rar壓縮包並且版本比較老(比如opencv-2.4.13.zip),而老版本的opencv中沒有定義ocv_download函數。
因為opencv_contrib模塊只提供了opencv3的支持,只能放棄opencv2版本,或者手動去修改各種頭文件和函數接口(暫時不考慮
重新編譯時,再次需要下載ippicv等模型文件
建議搜索cmake目錄下所有文件中的"file(REMOVE",注釋掉對應的行。出現本狀況的原因是opencv的cmake代碼中,執行完下載和解壓后就執行刪除,好不容易下載好的東西就刪除。。不理解這種做法。。
opencv4.1.1 Ubuntu16.04 編譯:
cmake .. -DCMAKE_BUILD_TYPE=Release -DOPENCV_GENERATE_PKGCONFIG=ON -DCMAKE_INSTALL_PREFIX=/usr/local/opencv-4.1.1
note: OPENCV_GENERATE_PKGCONFIG用來生成opencv4.pc,給pkg-config用,Makefile中使用。
opencv 3.1.0 windows 3rdparty下載
鏈接:https://pan.baidu.com/s/1-OHA8bTy3s8E1s482eHpWA
提取碼:wpwj
解壓后放到3rdparty目錄
OpenCV 3.1 VS2017編譯后沒法被find_pacakge()識別
這是歷史包袱,因為OpenCV3.1的cmake install腳本中沒有處理VS2017這一runtime。
找到OpenCV3.1源碼中cmake目錄,修改
- OpenCVConfig.cmake
- OpenCVDetectCXXCompiler.cmake
這兩個文件,改法一致,都是找到MSVC的判斷的最后部分,添加:
elseif(MSVC_VERSION GREATER_EQUAL 1910 AND MSVC_VERSION LESS_EQUAL 1920) #VS2017
set(OpenCV_RUNTIME vc15)
elseif(MSVC_VERSION GREATER_EQUAL 1920) #VS2019
set(OpenCV_RUNTIME vc16)
使用OpenCV Windows預編譯包提供的Python接口(cv2)
方式1:臨時改sys.path:
import sys
sys.path.insert(1, '/path/to/opencv/build/python/cv2/python-x.y')
import cv2
例如我是:
sys.path.insert(1, 'D:/lib/opencv/4.3.0/build/python/cv2/python-3.7')
注意:用sys.path.insert(1而不是sys.path.insert(0,因為0位置上表示“執行當前腳本的目錄”,可能會包含一些和三方依賴庫同名的文件,如果改掉了則可能導致沖突。ref
(update:測試發現,還和PATH有關系。。)

方式2:長期使用,則拷貝到Python的site-packages路徑下,例如:
D:/lib/opencv/4.3.0/build/python/cv2 => D:/soft/Miniconda3/Lib/site-packages/cv2
或
D:/lib/opencv/4.3.0/build/python/cv2 => D:/soft/Python37/Lib/site-packages/cv2
其中原生Python是3.7.7測試的,Miniconda的Python是3.7.4測試的,簡單的imwrite函數測試通過,其他未驗證。
P.S. 現在的Python(python3.6或更高版本,❤️.6的不確定),它自帶的pip用來安裝numpy,scipy,matplotlib等科學計算的包,已經非常方便了,以往Python2.7自帶的pip死活裝不上numpy的問題一去不復返了,Anaconda/Miniconda之流存在的意義又少了一層。
指定需要編譯的模塊(modules)
用-DDBUILD_LIST=來設定。例如:
cd opencv
git checkout 3.4
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=/your/path/to/opencv-compile
-DBUILD_LIST=core,imgcodecs,python_bindings_generator,python3,av_stream,dnn_innference
-DOPENCV_EXTRA_MODULES_PATH=/your/path/to/pybindcpp/modules/
-DBUILD_opencv_python3=ON
-DSOFTFP=ON ..
ref: pybindcpp
recursion is detected during loading of "cv2" binary extensions
opencv3/4的很多版本(不知道最新版本好了沒有),如果是自行編譯的,則正確安裝cv2 python模塊的方式是:
cd D:\work\opencv-3.4.11\build\vs2017-x64-gpu-cuda11\python_loader
python setup.py develop
但某一次,發現如上命令執行后仍然無效。排查發現,sys.path默認會包含D:\work\opencv-3.4.11\build\vs2017-x64-gpu-cuda11\python_loader目錄。
在D:\soft\Miniconda3\Lib\site-packages目錄下找到opencv.egg-link和easy-install.pth文件,刪除后,重新python setup.py develop即可。
