1. 程式人生 > >opencv-contrib-Python編譯module 'cv2.cv2' has no attribute 'xfeatures2d'

opencv-contrib-Python編譯module 'cv2.cv2' has no attribute 'xfeatures2d'

opencv-contrib-Python編譯module 'cv2.cv2' has no attribute 'xfeatures2d'

引言

opencv-contrib-Python編譯出現錯誤
sift = cv.xfeatures2d.SIFT_create()
cv2.error: OpenCV(3.4.3) C:\projects\opencv-python\opencv_contrib\modules\xfeatures2d\src\sift.cpp:1207: 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’

即是sift = cv.xfeatures2d.SIFT_create()函式無法使用,也是opencv-contrib-python無法使用。解決方法為降低opencv版本,因為當初安裝時是預設版本安裝的,版本比較高,但是也不清楚為什麼版本高了不支援,反正TensorFlow裡面對版本對應要求比較嚴格。

解決步驟一

開啟Anaconda解除安裝opencv。

pip uninstall opencv-python
pip install opencv-contrib-python

在這裡插入圖片描述

解決步驟二

重灌opencv-python、opencv-contrib-python。指定版本安裝。

 pip install opencv_python==3.4.2.16 
 pip install opencv-contrib-python==3.4.2.16

在這裡插入圖片描述

最後開啟Pycharm執行sift演算法測試:

import numpy as np
import cv2 as cv
img = cv.imread('test_1.jpg')
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
sift = cv.xfeatures2d.SIFT_create()
kp = sift.detect(gray,None)
img=cv.drawKeypoints(gray,kp,img)

cv.imshow("SIFT", img)
cv.imwrite('sift_keypoints.jpg',img)
cv.waitKey(0)
cv.destroyAllWindows()