首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV3,SIFT计算与vector<vector<KeyPoint>>

OpenCV3,SIFT计算与vector<vector<KeyPoint>>
EN

Stack Overflow用户
提问于 2015-12-29 09:12:24
回答 2查看 560关注 0票数 0

根据文档,SIFT对象可以使用下面的函数来计算多个图像的描述符:

虚拟空计算(InputArrayOfArrays映像,std::vector< std::vector< KeyPoint >&KeyPoint,OutputArrayOfArrays描述符)

我试图用下面的代码计算多个图像的SIFT描述符:

代码语言:javascript
复制
Ptr<Feature2D> f2d = xfeatures2d::SIFT::create();
vector<vector<KeyPoint>> train_keypoints;
f2d->detect(train_imgs, train_keypoints);

vector<Mat> train_descriptors;
f2d->compute(train_imgs, train_keypoints, train_descriptors);

它可以在MacOS10.10.5下用opencv3编译,而在执行过程中可能会因错误而终止:

libc++abi.dylib:以std::length_error:向量类型的未明确例外终止

或者我可以将train_descriptors类型更改为Mat (而不是vector< Mat >),但在执行过程中仍然会出现另一个错误:

函数计算中的断言失败( /tmp/opencv320151228-32931-2p5ggk/opencv-3.1.0/modules/features2d/src/feature2d.cpp,() == _InputArray::STD_VECTOR_MAT),文件OpenCV第126行libc++abi.dylib:在函数计算中终止cv::OpenCV: /tmp/opencv320151228-32931-2p5ggk/opencv-3.1.0/modules/features2d/src/feature2d.cpp:126:错误:(-215) _descriptors.kind() == _InputArray::STD_VECTOR_MAT

,我应该使用什么类型的train_descriptors来使这段代码正确编译和运行?

有人能告诉我OutputArrayOfArraysvector< Mat >有什么区别吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-29 13:15:53

你的代码

代码语言:javascript
复制
Ptr<Feature2D> f2d = xfeatures2d::SIFT::create();
vector<vector<KeyPoint>> train_keypoints;
f2d->detect(train_imgs, train_keypoints);

vector<Mat> train_descriptors;
f2d->compute(train_imgs, train_keypoints, train_descriptors);

如果train_imgsvector<Mat>,效果很好。

不需要创建包含50000个元素的向量,只需使用vector<Mat> train_descriptors;即可。

OutputArrayOfArraysInputArrayOutputArray等类似,是OpenCV用来允许传递给cv::Matstd::vector函数的抽象层。您不应该显式地使用这些类。来自OpenCV文档

该类仅为传递参数而设计。也就是说,通常不应该声明此类成员、局部变量和全局变量。

另外,请注意,OutputArrayOfArrays只是OutputArray的类型。

票数 2
EN

Stack Overflow用户

发布于 2015-12-29 09:29:15

我想,这段代码是可行的:

代码语言:javascript
复制
Ptr<Feature2D> f2d = xfeatures2d::SIFT::create();
vector<vector<KeyPoint>> train_keypoints;
f2d->detect(train_imgs, train_keypoints);

vector<Mat> train_descriptors = vector<Mat>(5e4);
f2d->compute(train_imgs, train_keypoints, train_descriptors);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34507914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档