2012-02-03 2 views
6

Я прочесал веб-сайт, чтобы узнать, как использовать функции выделения/дескриптора функции OpenCV 2.3.1a, чтобы выплеснуть любой вкус функций/дескрипторов изображения (STAR ​​/ SURF/ORB/SIFT/БЫСТРО). .. Я хорошо знаю, что OpenCV есть метод, называемый «goodFeaturesToTrack Это не поможет мне, как нет функциональных дескрипторов (что мне действительно нужно) я следовал документам, перечисленные здесь:Функция обнаружения в OpenCV Python Bindings

http://opencv.itseez.com/modules/features2d/doc/feature_detection_and_description.html

Ничего не работает. Я пробовал все варианты дескрипторов/функций. Я пробовал использовать одно- и многоканальные изображения (например, цветные и черно-белые) и несколько форматов изображений (8 бит и 32 ф). работал с текущим распределением и строит привязки из исходного репо. Большинство методов приводят к ошибке «unknown is not numpy array». Вот пример:

SimpleCV:1>import cv2 
SimpleCV:2>img = Image("aerospace.jpg") 
SimpleCV:3>bwimg = img._getGrayscaleBitmap() 
SimpleCV:4>bwimg 
SimpleCV:4><iplimage(nChannels=1 width=600 height=400 widthStep=600)> 
SimpleCV:5>surfer = cv2.SURF(0.5,4,2,False,False) 
SimpleCV:6>points = surfer.detect(bwimg,None) 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 

/Library/Python/2.6/site-packages/SimpleCV-1.2-py2.6.egg/SimpleCV/Shell/Shell.pyc in <module>() 
- 

TypeError: <unknown> is not a numpy array 
SimpleCV:7> 

Стоит отметить, что я использую SimpleCV для загрузки изображения, но метод _getGrayscaleBitmap() возвращает серый 8-битный IPL-образ, используемый OpenCV. Я уверен, что это работает, поскольку я использую его со сто других методов OpenCV без инцидентов.

Так может кто-нибудь указать мне на РАБОЧИЙ пример этого кода в Интернете. Я придумал десятки примеров и ничего не нашел.

+0

Для чего я отправил этот билет в Willow Garage, но мне бы хотелось найти решение как можно скорее. https://code.ros.org/trac/opencv/ticket/1582 – kscottz

ответ

10

Kat, это работает для меня:

s = cv2.SURF() 
mask = uint8(ones(gray.shape)) 
keypoints = s.detect(gray,mask) 

Я могу построить ключевые моменты, и все. Для получения дескрипторов вы можете попробовать это

k,d = s.detect(gray,mask,False) 
d = d.reshape((-1,128)) 
print d.shape, len(k) 

d должно иметь одинаковую длину в списке ключевых точек.

У меня есть этот пример в главе OpenCV здесь: http://www.maths.lth.se/matematiklth/personal/solem/book.html

+1

Все еще получаю сообщение об ошибке. Можете ли вы сделать мне одолжение и рассказать мне о сером изображении? он выглядит как массив numpy. Не работают ли типы изображений cvMat и IPL? – kscottz

+0

Хорошо от SimpleCV это выглядит, как он будет работать: серый = uint8 (. Np.array (cv.GetMat (img._getGrayscaleBitmap())) транспонирования()) Это займет меня день или около того, чтобы сделать доказательство концепции. – kscottz

+0

Да, это массив uint8 numpy. Связи cv2 python нуждаются в некоторой работе, большинство функций пока не реализованы. –

0

Похоже, у вас есть PIL изображение. Попробуйте преобразовать в numpy изображение: npImage = np.array (img)