使用Opencv Python的FREAK描述符

15 投票
2 回答
9132 浏览
提问于 2025-04-17 14:05

我在用Python和Opencv实现FREAK描述符。以下是我使用的代码:

def surf_freak_detect(image,hessianThreshold):
    surfDetector = cv2.SURF(hessianThreshold)
    surfDetector=cv2.GridAdaptedFeatureDetector(surfDetector,50)
    keypoints = surfDetector.detect(image,None) 
    freakExtractor = cv2.DescriptorExtractor_create('FREAK')
    keypoints,descriptors= freakExtractor.compute(image,keypoints)
    del freakExtractor
    return keypoints,descriptors

这样初始化FREAK描述符对吗?我做了一些调试,发现计算描述符的时候,解释器花了很长时间,最后还崩溃了。关键点检测得很好。奇怪的是,这有时候能正常工作,而有时候又崩溃

2 个回答

9

现在在OpenCV 3.0中,有了Python可以使用的FREAK绑定。它的配置选项可以在这里找到。不过,关于如何在Python中实际调用它的文档似乎缺失了,但你可以这样在Python中使用它:

freakExtractor = cv2.xfeatures2d.FREAK_create()
keypoints,descriptors= freakExtractor.compute(image,keypoints)

(你需要从一个单独的特征检测器那里获取关键点,就像你在上面的代码中做的那样。)

11

如果关键点检测得很好,但在生成描述符时程序崩溃,那是因为描述符区域(也就是围绕关键点的那部分)超出了图像的范围,这样就会出现访问一个不存在的位置的问题。

你需要想办法限制一下freak描述符的操作区域。

撰写回答