0

我有以下代码:

//newImg is a mat of an image and orderedKeyPoint is the result from Fast
cv::FREAK extractor;
cv::Mat queryDescriptors;
extractor.compute(newImg, orderedKeyPoint, queryDescriptors);

我正在尝试使用 queryDescriptors.at< ???>(r,0) 访问单个怪胎描述符,其中 r 是任意有效的行值,但我不确定类型。所有文档都声明它只是一个描述符,但它是 Mat 或 double 类型还是其他类型?这是最好的方法吗?

cv::Mat descriptor2 = queryDescriptors.at<cv::Mat>(2,0);

我希望能够通过获取单个描述符并将它们放入 cv::Mat 的行值中来重建 queryDescriptors(描述符的 Mat),例如:

queryDescriptors.at<cv::Mat>(2,0) = descriptor2;

任何帮助或见解将不胜感激,

艾萨克

4

2 回答 2

1

FREAK 描述符是一个具有 64 列和 numkeypoints 行的 uchar Mat。

因此,要了解其中的一个元素:

uchar elm = descriptor.at<uchar>(row,col);

其中 row 是关键点 id,col 是元素 id。

于 2013-05-21T14:20:34.497 回答
0

如果您查看 \opencv\modules\features2d\src\freak.cpp 您可以看到:

int FREAK::descriptorSize() const
{
    return FREAK_NB_PAIRS / 8; // descriptor length in bytes
}

int FREAK::descriptorType() const
{
    return CV_8U;
}

int FREAK::defaultNorm() const
{
    return NORM_HAMMING;
}

} // END NAMESPACE CV

所以 uchar 似乎是 berak 已经建议的类型。

于 2014-04-02T13:45:24.210 回答