我试图使用Opencv在Python中实现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
这是初始化怪胎描述符的正确方法吗?通过一些调试,我发现解释器需要花费很长时间来计算描述符然后最终崩溃。正确检测关键点。奇怪的是,它有时会起作用而有时会崩溃!
答案 0 :(得分:9)
如果正确检测到关键点,但程序在生成描述符时崩溃,那是因为描述符区域(围绕关键点)来自图像并且存在内存访问到一个不存在的位置。
你必须以某种方式限制freak描述符的操作区域。
答案 1 :(得分:3)
现在在OpenCV 3.0中有FREAK的Python绑定。其配置选项描述为here。它似乎缺少如何在Python中实际调用它的文档,但您可以在Python中使用它:
Dim tbList As TextBox() = {txtMath, txtEnglish, txtScience, txtFilipino, txtPE}
Dim Ave As Double = 0
For Each item In tbList
If item.Text = Nothing Then
item.Text = "0"
End If
Ave += Val(item.Text)
Next
Ave = Ave / tbList.Length
lb_Average.Text = Ave.ToString
(您必须从单独的功能检测器获取关键点,就像您在上面的代码中所做的那样。)