2013-07-16 62 views
3

我正在使用Python 2.7和opencv版本2.4.2。我遇到了分段錯誤問題。 這裏是我嘗試代碼:Python opencv特徵檢測器導致分段錯誤

import cv2 
img = cv2.imread(img_path) 
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
detector = cv2.FeatureDetector_create("SURF") # or "SIFT" 
kp = detector.detect(img2) 

最後一行導致分段錯誤,我不明白爲什麼。我知道至少有另一個主題的帖子,即:Does anyone have any examples of using OpenCV with python for descriptor extraction? 但它似乎並沒有解決我的問題。

任何幫助將非常感激!謝謝!

+0

您是否嘗試過顯示img或檢查它是否正確讀取? – lightalchemist

+0

我有,是的,一切都很好,直到我嘗試檢測功能。好點,但有時它就是這麼簡單:) – cenna75

+0

如果你嘗試'cv2.Feature2D_create('SURF')'會發生什麼?它似乎對我有相同的功能。 – Aurelius

回答

0

我很肯定cv2.FeatureDetector_create()真的只在C++界面。你想要做這樣的事情:

import numpy as np 
import cv2 

img = cv2.imread(img_path) 
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
surf = cv2.SURF() 
mask = np.uint8(np.ones(gray.shape)) 
surf_points = surf.detect(gray, mask) 
+0

感謝您的回答。事實證明,這個版本的opencv沒有SURF屬性編碼(cv2.SURF()產生:「AttributeError:'模塊'對象沒有屬性'SURF'」)。我想知道python和opencv版本(2.7和2.4.2)之間是否可能存在不兼容問題? – cenna75

+0

我正在運行Python 2.7.2和OpenCV 2.4.5。在IDLE中導入cv2後面跟着'cv2.SURF()'錯誤? –

+0

哦,[docs](http://docs.opencv.org/modules/nonfree/doc/feature_detection.html#surf-operator)也有'cv2.SURF.detect(image [,mask]) - > key_points',但它可能對您有用。 –

1
我使用Ubuntu 12.04,其中包括OpenCV的2.3.1

。我想要一個更新版本的OpenCV,所以我找到了一個帶有OpenCV 2.4.5 backport的PPA。當我嘗試使用I cv2.FeatureDetector_create("SURF")cv2.FeatureDetector_create("SIFT")時,我遇到了與以前一樣的分段錯誤。我意識到這兩種方法都是非自由的,並且發現我的OpenCV安裝缺少libopencv-nonfree2.4包。我切換到另一個包含它的PPA,這似乎解決了這個問題。

+0

SIFT和SURF均爲非自由算法專利。一些軟件包管理員對此非常挑剔 – berak