我在Python中使用OpenCV 2.4来匹配两个图像之间的特性,但是我想更改“ORB”检测器的一个参数(它提取“nfeatures”的特性数量),而在Python中似乎没有办法这样做。
对于C++,你可以通过java的“读”(或“加载”)加载一个参数YLL/XML文件?特性检测器/描述符牵引器的方法。但是Python绑定缺少此函数/方法。
它还缺少直接创建ORB对象的绑定,所以我不能在那里传递参数(Python绑定似乎要求您使用cv2.DescriptorExtractor_create by string name--如果您传递了错误的字符串名称或参数,则会出现segfult。。。此外,该函数不能接受它似乎传递给构造函数的任何其他参数。
我唯一的希望似乎是用cv2.cv.Load(filename)从xml加载完整的对象,但这似乎需要一个对象实例,而不是一个算法定义,为此我找不到新的或旧语法中的任何Python绑定。我在文件加载步骤中尝试了几种变体,包括模仿OpenCV中保存的xml文件的样式,但没有成功。
有没有人在我上面尝试的步骤中成功地将参数传递到OpenCV中的检测器(SURF或ORB,或任何通用算法)上?
下面是我用来提取功能的代码:def findFeatures(greyimg, detector="ORB", descriptor="ORB"):
nfeatures = 2000 # No way to pass to detector...?
detector = cv2.FeatureDetector_create(detector)
descriptorExtractor = cv2.DescriptorExtractor_create(descriptor)
keypoints = detector.detect(greyimg)
(keypoints, descriptors) = descriptorExtractor.compute(greyimg, keypoints)
return keypoints, descriptors
编辑
在windows实现中,更改检测器设置似乎只是segfault——等待OpenCV站点上出现补丁或补丁。