使用FlannBasedMatcher调用knnMatch报错:cv::Ptr无该成员
问题分析与解决
嘿,这个问题我太熟了!你遇到的错误核心原因是OpenCV的Ptr智能指针需要用箭头运算符->来访问内部对象的成员方法,而不是你代码里用的点运算符.。
问题出在哪里?
你声明的matcher是Ptr<FlannBasedMatcher>类型——这是OpenCV的智能指针类,它本身并没有knnMatch这个成员方法。knnMatch是属于FlannBasedMatcher对象的方法,而Ptr只是负责管理这个对象的内存,所以必须通过->运算符来代理调用内部对象的方法,而不是直接用.访问Ptr自身的成员。
修正后的代码
把调用knnMatch的那行代码改成这样:
vector<MatchesInfo> matches; Ptr<FlannBasedMatcher> matcher(new flann::LshIndexParams(20, 10, 2)); matcher->knnMatch(afeatures.descriptors, bfeatures.descriptors, matches, 2);
额外补充
OpenCV的Ptr类重载了->和*运算符,用来方便地访问它所指向的对象:
- 用
->直接调用对象的成员方法(比如matcher->knnMatch(...)) - 用
*获取对象的引用(比如(*matcher).knnMatch(...),不过这种写法不如->简洁)
内容的提问来源于stack exchange,提问作者lazyadt
相关产品推荐
相关产品推荐

