如何使用opencv的函数?
How to use a function from opencv?
与这篇文章和这篇文章类似,我想通过修改此示例 SURF 检测和 opencv 库中的匹配代码,将检测到的关键点转换为椭圆关键点。
但是,我对 c++ 语法知之甚少,只熟悉 matlab。以前的帖子似乎指向使用以下来自 opencv 库的评估.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
和- 分别
namespace "cv::xfeatures2d" has no member "EllipticKeyPoint"
我应该使用哪个类/命名空间/成员?如何正确编写代码,以便使用此函数将关键点转换为椭圆关键点?
Welk...如果您想要合理的答案,您应该向我们展示您的确切代码,但是......
如果我没记错的话,消息"name后跟'::"必须是类或命名空间名称"是误导性的:也可以是静态方法名称,这就是您的意图。
我想,问题是另一个问题。
EllipticKeyPoint
中定义了两种convert()
静态方法:第一种在EllipticKeyPoint
向量中转换KeyPoint
的向量;第二种在KeyPoint
向量中转换EllipticKeyPoint
向量。
但是当你打电话
cv::EllipticKeyPoint::convert(keypoints1, keypoints1);
你试图将keypoints1
转换为自身;所以(向量)KeyPoint
KeyPoint
或EllipticKeyPoint
转换为EllipticKeyPoint
。
而且您缺少这种类型的转换器。
您的意图如下?
cv::EllipticKeyPoint::convert( _keypoints1 , keypoints1 );
在calculateRepeatability()
我看到
EllipticKeyPoint::convert( _keypoints1, keypoints1 );
EllipticKeyPoint::convert( _keypoints2, keypoints2 );
所以要小心下划线(_
)。
--- 编辑 2016.06.11 ---
如果您打算将KeyPoint
的向量转换为EllipticKeyPoint, I suppose you should define, together
个关键点1的向量and
关键点2',则另外几个向量,例如
std::vector<KeyPoint> keypoints1, keypoints2;
std::vector<EllipticKeyPoint> ellkeypoints1, ellkeypoints2;
并且,当keypoints1
和keypoints2
加载时,调用convert()
;我想像
std::cout << "FOUND " << keypoints1.size() << " keypoints on first image" << std::endl;
std::cout << "FOUND " << keypoints2.size() << " keypoints on second image" << std::endl;
EllipticKeyPoint::convert(keypoints1, ellkeypoints1);
EllipticKeyPoint::convert(keypoints2, ellkeypoints2);
std::cout << "FOUND " << ellkeypoints1.size() << " elliptic keypoints on first image" << std::endl;
std::cout << "FOUND " << ellkeypoints2.size() << " elliptic keypoints on second image" << std::endl;
- C++ OpenCV 卡尔曼滤波器构造函数错误
- 如何将 c++ get 函数代码转换为 opencv 算法中使用的 python
- OpenCV imwrite 函数导致'undefined symbol'
- OpenCV 函数 cv::remap() 的执行时间更长,当程序在两者之间进入睡眠状态时
- 如果函数使用 OPENCV Mat 作为输入,如何编写头文件?
- C++ OpenCV Randu 函数抛出'Integer division by zero'
- c++调用opencv相关函数,并且被打包到dll中,c#无法调用它
- 在OpenCV_core310.dll中使用findContours函数时,OpenCV引发未处理的异常
- 为什么OpenCV Templete匹配函数根本不准确
- OpenCV 与 C++,使用 cv::utils::fs::glob() 函数
- C++中相同的CV函数(OpenCV)
- OpenCV 如何确定具有不同参数的函数的 python 绑定?
- openCV Mat 中的值在自定义类构造函数中设置后不会保留
- 将自适应阈值应用于范围函数 opencv c++
- 双曲最终概率密度函数 Opencv
- 使用标准化函数/OPENCV和C 获取内存分配错误
- 将Mat传递给JNI函数-OpenCV
- 删除Mat int函数(opencv)
- 我不能使用函数'OpenCV的放置文本
- 鼠标回调函数 OpenCV