我有以下代码:
//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(描述符之间),例如:
queryDescriptors.at<cv::Mat>(2,0) = descriptor2;
非常感谢任何帮助或见解,
艾萨克
答案 0 :(得分:1)
FREAK描述符是一个带有64个cols和numkeypoints行的uchar Mat。
所以,要找到它的一个元素:
uchar elm = descriptor.at<uchar>(row,col);
其中row是关键点id,col是元素id。
答案 1 :(得分: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已经建议的类型。