无法在 Python OpenCV v4.20 中使用 SIFT

Yun*_*mez 7 python opencv image image-processing sift

我正在使用 OpenCV v4.20 和 PyCharm IDE。我想使用SIFT算法。但我收到这个错误。我在互联网上寻找此错误的解决方案,但没有一个对我有帮助。你知道这个错误的解决方法吗?(使用 pip 我可以安装至少 3.4.2.16 版本的 OpenCV)

这是我的错误:

回溯(最近一次调用):文件“C:/Users/HP/PycharmProjects/features/featuredetect.py”,第 7 行,在 sift = cv.xfeatures2d_SIFT.create()

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 implementation) 这个算法是已获得专利并被排除在此配置中;设置 OPENCV_ENABLE_NONFREE CMake 选项并在函数 'cv::xfeatures2d::SIFT::create' 中重建库

这是我的代码:

import cv2 as cv

image = cv.imread("the_book_thief.jpg")
gray_image = cv.cvtColor(image,cv.COLOR_BGR2GRAY)

sift = cv.xfeatures2d_SIFT.create()
keyPoints = sift.detect(image,None)

output = cv.drawKeypoints(image,keyPoints,None)

cv.imshow("FEATURES DETECTED",output)
cv.imshow("NORMAL",image)

cv.waitKey(0)
cv.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

Ass*_*-ge 8

SIFT 的专利已于去年 7 月到期。在版本 > 4.4 中,检测器 init 命令已更改为cv2.SIFT_create(). 如果你没有使用 opencv 的 GUI,建议安装 headless 版本:pip install opencv-python-headless

  • 这是 2021 年的正确答案。我在使用“pip install opencv-python-headless”时遇到了问题,但我能够安装“pip install opencv-contrib-python”并以“cv2.SIFT_create()”方式运行 sift,而无需问题。 (2认同)

nat*_*ncy 7

不幸的是,根据这个 Github 问题,SIFT 在 opencv > 3.4.2 中不再可用。由于您使用的OpenCV V4.2.0,它不是,即使你已经安装了包括pip install opencv-contrib-python如图这篇文章。解决方法是降级到任何包含 SIFT 的以前的 OpenCV 版本(我相信下面的任何版本3.4.3)。降级到v3.4.2.16.

pip install opencv-python==3.4.2.16
pip install opencv-contrib-python==3.4.2.16
Run Code Online (Sandbox Code Playgroud)

使用你的代码v3.4.2.16,SIFT 似乎工作


Dem*_*nes -3

问题的解决方案应该是安装 opencv-contrib-python-nonfree (可通过 pip 获得)。

$ pip install opencv-contrib-python-nonfree
Run Code Online (Sandbox Code Playgroud)

由于错误表明 SIFT 已获得专利,因此由于许可原因未包含在 OpenCV 中。它包含在非自由部分中。