类似于this post和this后,我想通过修改this示例SURF检测和来自opencv库的匹配代码,将检测到的关键点转换为椭圆关键点。如何使用opencv中的函数?
但是,我对C++语法知之甚少,只能熟悉matlab。以前的职位似乎指向使用下面的代码从OpenCV库的evaluation.cpp以将它们转换:
void EllipticKeyPoint::convert(const std::vector<KeyPoint>& src, std::vector<EllipticKeyPoint>& dst)
{
if(!src.empty())
{
dst.resize(src.size());
for(size_t i = 0; i < src.size(); i++)
{
float rad = src[i].size/2;
CV_Assert(rad);
float fac = 1.f/(rad*rad);
dst[i] = EllipticKeyPoint(src[i].pt, Scalar(fac, 0, fac));
}
}
}
关键点似乎的示例代码线202之后被生成。所以,我想下面的加入将它们转换成椭圆形的关键点:
cv::EllipticKeyPoint::convert(keypoints1, keypoints1);
线202后using namespace cv::xfeatures2d::EllipticKeyPoint
的代码
,但开始时都显示错误,他说:
name followed by '::' must be a class or namespace name
andnamespace "cv::xfeatures2d" has no member "EllipticKeyPoint"
respecti vely
我应该使用哪个类/名称空间/成员?如何正确编写代码以便我可以使用此函数将关键点转换为椭圆关键点?
确切的代码是示例SURF代码(第3个链接从帖子)。我希望通过使用opencv库中的易用代码来为其添加1或2行。我试着将你的1行代码添加到示例代码中,但它不起作用。使用这个:'cv :: evaluateFeatureDetector(img1.getMat(ACCESS_READ),img2.getMat(ACCESS_READ),H,);'似乎工作,但我不明白第三个参数等等。对于我来说,看起来我对所有不同种类的符号都非常困惑。你能解释一下它的含义吗? – SK90
我的意思是象“<>,&,*和::”这样的符号以及它们如何组合在一起会让我感到困惑,因为我不熟悉C++ – SK90
@ SK90 - 回答改进以解释(我希望)转换()';关于“<>,&,*和::”的使用,那么......你可以尝试询问单个示例,但很难给出一个普遍的答案; C++是一门复杂的语言,我建议用一本好书或者一本非常好的教程来学习它 – max66