我有两个关于opencv SiftDescriptorExtractor的问题:
- 如何将描述符从
cv::Mat
转换为vector<float* >
(第I行=第I行描述符) - 如何定义SIFT描述符的大小(=维度)?
是的,我知道关于OpenCV参考,但是,我无法让它工作。有人能把这里最小的工作实例,请?
时转换:
vector<float*> descriptor;
for(int i; i = 0; i < keypoints.size())
{
descriptor.push_back(&keypoints.at<float>(i));
}
2-Size:
你不能像SIFT算法那样定义块、箱等的大小。你能做什么?您可以编写自己的代码。这是一个很难的方法,但我鼓励你尝试一下。
- 您可以访问cv::Mat的每个元素,并自己创建vector。如果您想知道如何访问cv::Mat 中的元素,这可能会有所帮助。
- 据我所知,你没有办法用OpenCV提供的SiftDescriptorExtractor来做到这一点。但是SIFT实现的OpenCV取自http://blogs.oregonstate.edu/hess/code/sift/因此,您可以修改原始代码来更改描述符的大小。通过修改SIFT描述符bin大小的常量,可以改变描述符的大小。如果您需要更多信息,您应该阅读代码。代码的注释很好,并基于Lowe的论文2004从尺度不变关键点的显著图像特征。