在 Python OpenCV 4.2.0(2020 年)中使用 SIFT(或替代方法)
Using SIFT (or an alternative) in Python OpenCV 4.2.0 (In 2020)
我正在尝试通过 Python 使用 SIFT 进行特征检测,但它不再是 OpenCV 或 OpenCV 贡献的一部分。
使用 OpenCV opencv-contrib-python(这两个版本都是 4.2.0.34,这个问题的最新版本),我得到:
>>> import cv2
>>> cv2.SIFT_create()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'cv2.cv2' has no attribute 'SIFT_create'
>>> cv2.xfeatures2d.SIFT_create()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
cv2.error: OpenCV(4.2.0) C:\projects\opencv-python\opencv_contrib\modules\xfeatures2d\src\sift.cpp:1210:
error: (-213:The function/feature is not implemented) This algorithm is patented and is excluded in
this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function
'cv::xfeatures2d::SIFT::create'
我找到的每个相关答案都建议使用 contrib 或旧版本,但这些都不再有效。
从源代码构建它以按照错误指示取回 SIFT 更容易,还是使用替代方法更容易?我该怎么做呢?我所需要的只是一些进行特征检测的方法,最好是尺度不变的。
This question 提到了 SIFT 替代方案但是非常过时(最佳答案大约有 8 年历史)。 2020年我们现在能做什么?
编辑显示 OpenCV 3 不工作:
正在尝试安装 OpenCV 3:
>>> pip install opencv-python==3
ERROR: Could not find a version that satisfies the requirement opencv-python==3
(from versions: 3.4.2.16, 3.4.2.17, 3.4.3.18, 3.4.4.19, 3.4.5.20, 3.4.6.27,
3.4.7.28, 3.4.8.29, 3.4.9.31, 3.4.9.33, 4.0.0.21, 4.0.1.23, 4.0.1.24, 4.1.0.25,
4.1.1.26, 4.1.2.30, 4.2.0.32, 4.2.0.34)
ERROR: No matching distribution found for opencv-python==3
>>> pip install opencv-python==3.4.2.16
然后在 Python:
>>> import cv2
>>> print(cv2.__version__)
3.4.2
>>> cv2.SIFT_create()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'cv2.cv2' has no attribute 'SIFT_create'
SIFT 的专利于 2020 年 3 月到期。但是将 SIFT 移至免费开源集合可能无法更新 opencv。
看到这个问题:https://github.com/skvark/opencv-python/issues/126
使用非自由组件重建:
git clone --recursive https://github.com/skvark/opencv-python.git
cd opencv-python
export CMAKE_ARGS="-DOPENCV_ENABLE_NONFREE=ON"
python setup.py bdist_wheel
来自the issue:
使用非自由组件重建:
git clone --recursive https://github.com/skvark/opencv-python.git
cd opencv-python
export CMAKE_ARGS="-DOPENCV_ENABLE_NONFREE=ON"
python setup.py bdist_wheel
我正在尝试通过 Python 使用 SIFT 进行特征检测,但它不再是 OpenCV 或 OpenCV 贡献的一部分。
使用 OpenCV opencv-contrib-python(这两个版本都是 4.2.0.34,这个问题的最新版本),我得到:
>>> import cv2
>>> cv2.SIFT_create()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'cv2.cv2' has no attribute 'SIFT_create'
>>> cv2.xfeatures2d.SIFT_create()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
cv2.error: OpenCV(4.2.0) C:\projects\opencv-python\opencv_contrib\modules\xfeatures2d\src\sift.cpp:1210:
error: (-213:The function/feature is not implemented) This algorithm is patented and is excluded in
this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function
'cv::xfeatures2d::SIFT::create'
我找到的每个相关答案都建议使用 contrib 或旧版本,但这些都不再有效。
从源代码构建它以按照错误指示取回 SIFT 更容易,还是使用替代方法更容易?我该怎么做呢?我所需要的只是一些进行特征检测的方法,最好是尺度不变的。
This question 提到了 SIFT 替代方案但是非常过时(最佳答案大约有 8 年历史)。 2020年我们现在能做什么?
编辑显示 OpenCV 3 不工作:
正在尝试安装 OpenCV 3:
>>> pip install opencv-python==3
ERROR: Could not find a version that satisfies the requirement opencv-python==3
(from versions: 3.4.2.16, 3.4.2.17, 3.4.3.18, 3.4.4.19, 3.4.5.20, 3.4.6.27,
3.4.7.28, 3.4.8.29, 3.4.9.31, 3.4.9.33, 4.0.0.21, 4.0.1.23, 4.0.1.24, 4.1.0.25,
4.1.1.26, 4.1.2.30, 4.2.0.32, 4.2.0.34)
ERROR: No matching distribution found for opencv-python==3
>>> pip install opencv-python==3.4.2.16
然后在 Python:
>>> import cv2
>>> print(cv2.__version__)
3.4.2
>>> cv2.SIFT_create()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'cv2.cv2' has no attribute 'SIFT_create'
SIFT 的专利于 2020 年 3 月到期。但是将 SIFT 移至免费开源集合可能无法更新 opencv。
看到这个问题:https://github.com/skvark/opencv-python/issues/126
使用非自由组件重建:
git clone --recursive https://github.com/skvark/opencv-python.git
cd opencv-python
export CMAKE_ARGS="-DOPENCV_ENABLE_NONFREE=ON"
python setup.py bdist_wheel
来自the issue: 使用非自由组件重建:
git clone --recursive https://github.com/skvark/opencv-python.git
cd opencv-python
export CMAKE_ARGS="-DOPENCV_ENABLE_NONFREE=ON"
python setup.py bdist_wheel