OpenCV Python绑定中的特征检测
我已经梳理了网络,寻找一种方法来获得OpenCV 2.3.1a特征提取/描述符绑定,以便吐出任何图像特征/描述符(STAR / SURF / ORB / SIFT / FAST)。 我很清楚OpenCV有一个名为“goodFeaturesToTrack”的方法,这对我没有帮助,因为没有特征描述符(这是我真正需要的),我遵循了这里列出的文档:
http://opencv.itseez.com/modules/features2d/doc/feature_detection_and_description.html
似乎没有任何工作。 我已经尝试了描述符/特征的所有特征。 我试过使用单通道和多通道图像(即彩色和黑白)和多种图像格式(8位和32f)。 我已经与当前的发行版一起工作,并从源代码回购库构建绑定。 大多数方法导致“未知不是numpy数组”错误。 这里是一个例子:
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()方法返回OpenCV使用的灰色8位IPL图像。 我相信这一点很有效,因为我使用它与其他数百种OpenCV方法无关。
所以任何人都可以指向我在网络上的这个代码的工作例子。 我梳理了几十个例子,发现没有什么可行的。
吉,这对我有用:
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
看起来你有一个PIL图像。 尝试转换为numpy图像:npImage = np.array(img)
链接地址: http://www.djcxy.com/p/89733.html