出错原因
这个错误信息表明,正在尝试使用OpenCV库中的一个受专利保护的算法(SURF),但当前的OpenCV配置中没有启用这些非自由算法。
解决办法
解决这个问题的方法是重新编译OpenCV库,并在编译时启用非自由算法。具体步骤如下:
1.卸载当前的OpenCV版本:
先进入环境!
pip uninstall opencv-python opencv-contrib-python
2.安装编译OpenCV所需的依赖:
Ubuntu系统可以使用以下命令安装必要的依赖项:
sudo apt-get update
sudo apt-get install build-essential cmake git pkg-config libgtk-3-dev \
libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \
libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev \
gfortran openexr libatlas-base-dev python3-dev python3-numpy \
libtbb2 libtbb-dev libdc1394-22-dev
3.下载OpenCV和OpenCV Contrib源码:
cd ~
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
cd opencv
git checkout 4.5.2 # 切换4.5.2版本或者自己想要的版本
cd ../opencv_contrib
git checkout 4.5.2 # 切换4.5.2版本
4.配置和编译OpenCV
cd ../opencv
mkdir build
cd build
不启用cuda支持:
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=$CONDA_PREFIX \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib/modules \
-D PYTHON_EXECUTABLE=$CONDA_PREFIX/bin/python \
-D BUILD_EXAMPLES=OFF \
-D OPENCV_ENABLE_NONFREE=ON ..
启用cuda支持则使用下方代码配置:
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=$CONDA_PREFIX \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib/modules \
-D PYTHON_EXECUTABLE=$CONDA_PREFIX/bin/python \
-D BUILD_EXAMPLES=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D WITH_CUDA=ON \
-D CUDA_ARCH_BIN=7.5 \
-D WITH_CUDNN=ON \
-D OPENCV_DNN_CUDA=ON \
-D ENABLE_FAST_MATH=ON \
-D CUDA_FAST_MATH=ON \
-D WITH_CUBLAS=ON ..
CUDA_ARCH_BIN 应根据自己GPU架构进行设置,可以通过nvidia-smi或nvcc --version找到。
opencv_enable_nonfree的作用是启用非自由算法。
MODULES_PATH的位置根据opencv_contrib相对于build的位置填写。
make -j8
sudo make install
验证安装
import cv2
surf = cv2.xfeatures2d.SURF_create()