Python OpenCV太快-功能太多

Python OpenCV太快-功能太多,python,opencv,feature-detection,keypoint,Python,Opencv,Feature Detection,Keypoint,我正在尝试提取特征,以便稍后可以训练一个将在Android应用程序中使用的SVM。我使用python查找和提取这些特性,因为它易于编写并节省时间。我的问题是,我有太多的功能,我不知道如何获得最好的功能只。我发现在OpenCV的C++ API中有一个方法保持最佳,但是我不能为Python找到它。你能给我一个建议吗 这是我使用的代码: import numpy as np import cv2 from matplotlib import pyplot as plt img = cv2.imrea

我正在尝试提取特征,以便稍后可以训练一个将在Android应用程序中使用的SVM。我使用python查找和提取这些特性,因为它易于编写并节省时间。我的问题是,我有太多的功能,我不知道如何获得最好的功能只。我发现在OpenCV的C++ API中有一个方法保持最佳,但是我不能为Python找到它。你能给我一个建议吗

这是我使用的代码:

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('./positive_images/1.jpg',cv2.CV_LOAD_IMAGE_GRAYSCALE)
#img = cv2.resize(cv2.imread('./positive_images/3.png',cv2.CV_LOAD_IMAGE_GRAYSCALE), (100, 100))
#th3 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,2)
ret,th3 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)
cv2.imwrite("result1.jpg", th3)

img = th3

# Initiate FAST object with default values
fast = cv2.FastFeatureDetector()

# find and draw the keypoints
keypoints = fast.detect(img,None)
img2 = cv2.drawKeypoints(img, keypoints, color=(255,0,0))

cv2.imwrite('fast_true.png',img2)

# Disable nonmaxSuppression
fast.setBool('nonmaxSuppression',0)
keypoints = fast.detect(img,None)

print "Total Keypoints without nonmaxSuppression: ", len(keypoints)

img3 = cv2.drawKeypoints(img, keypoints, color=(255,0,0))
cv2.imwrite("result.jpg",img3)
原始图像:

以及结果图像:

我的目标是检测方向盘。

如果您查看,您将看到您可以为快速检测器设置阈值:

FastFeatureDetector( int threshold=1, bool nonmaxSuppression=true, type=FastFeatureDetector::TYPE_9_16 );
这里,默认的
阈值设置为1。在代码中,尝试将其设置为40,然后查看结果,如下所示:

fast = cv2.FastFeatureDetector(40)
您将发现有关阈值含义的详细信息:

  • 在图像中选择一个像素p,该像素p将被识别为兴趣点或非兴趣点。让它的强度为I\u p
  • 现在,如果圆(16个像素)中存在一组n个连续像素,它们都比I_p+t亮,或者都比I_p暗,那么像素p就是一个角点− T(上图中显示为白色虚线)。n被选为12岁

  • 关键点有一个“响应”成员。你可以试着过滤掉最差的。谢谢你的帮助。我会看看这个(我希望我会有更好的结果)。还记得,整个关键点/特征检测都会找到这个特定的模型。(你可能无法通过这种方式检测任意车轮。这就是为什么我要训练一个SVM,而且我不会只使用这张图片。方向盘没有像其整体轮廓那样突出的功能。你不是有相同的Python构造函数吗?我正在试着查找文档,但出于某种原因,我无法让你尝试
    fast=cv2.FastFeatureDetector(40)
    ?哦,我忘了,我真的很抱歉。是的,它起作用了。非常感谢!您能将您的评论中的python行添加到您的答案中吗?我会将其标记为已接受。