我必须SURF描述转换为关键点,以纪念它的image.I已经找到了转换功能转换垫关键点?.但我得到的结果非常奇怪.这是以下功能.
vector<KeyPoint> mat_to_keypoints(Mat mat) {
vector<KeyPoint> c_keypoints;
for ( int i = 0; i < mat.rows; i++) {
Vec<float, 7> v = mat.at< Vec<float, 7> >(i,0);
KeyPoint kp(v[0],v[1],v[2],v[3],v[4], (int)v[5], (int)v[6]);
c_keypoints.push_back(kp);
}
return c_keypoints;
}
Run Code Online (Sandbox Code Playgroud)
这是我的示例代码
SurfDescriptorExtractor surfDesc;
Mat descriptors1;
surfDesc.compute(img_test, keypoints1, descriptors1);
Point2f p;
std::vector<cv::KeyPoint> keypoint1_;
keypoint1_= mat_to_keypoints(descriptors1);
for(int i=0;i<keypoint1_.size();i++)
{
p = keypoint1_[i].pt;
cout<<p<<endl;
}
Run Code Online (Sandbox Code Playgroud)
有原始的关键点
[287.016, 424.287]
[286.903, 424.413]
Run Code Online (Sandbox Code Playgroud)
这些是从描述符转换为关键点后的关键点
-0.001208060.00063669
00
00
00
00
0.002944490.00162154
-0.0005055370.000337795
0.00683623-0.00150546
Run Code Online (Sandbox Code Playgroud)
有人可以建议我,如何从描述符转换为关键点?
你正在搞乱关键点的描述符.描述符表示与关键点关联的特征向量.描述符不包括它们描述的补丁的位置(X,Y).
您无法将一组描述符转换为一组关键点/点.
您可以使用此静态方法(未记录)从点转换关键点:
vector<Point2f> points1;
KeyPoint::convert(keypoints1, points1);
Run Code Online (Sandbox Code Playgroud)
遗憾的是,OpenCV中有许多无证/隐藏功能非常有用.
| 归档时间: |
|
| 查看次数: |
1048 次 |
| 最近记录: |