如何在Ubuntu下用c++调用vlfeat中的sift

qq_38093409 2017-04-01 10:16:23
有代码吗,实在是不会
...全文
269 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
JessieBoom 2019-05-18
  • 打赏
  • 举报
回复
void FeatureController::detect(const Mat & _grey_img,
vector<Point2> & _feature_points,
vector<FeatureDescriptor> & _feature_descriptors) {

Mat grey_img_float = _grey_img.clone();
grey_img_float.convertTo(grey_img_float, CV_32FC1);


VlSiftFilt * vlSift = vl_sift_new(width, height,
log2(min(width, height)),
SIFT_LEVEL_COUNT,
SIFT_MINIMUM_OCTAVE_INDEX);
vl_sift_set_peak_thresh(vlSift, SIFT_PEAK_THRESH);
vl_sift_set_edge_thresh(vlSift, SIFT_EDGE_THRESH);

if(vl_sift_process_first_octave(vlSift, (vl_sift_pix const *) ROI.data) != VL_ERR_EOF) {
do {
vl_sift_detect(vlSift);
for(int i = 0; i < vlSift->nkeys; ++i) {
double angles[4];
_feature_points.emplace_back(vlSift->keys[i].x, vlSift->keys[i].y);
FeatureDescriptor descriptor;
int angleCount = vl_sift_calc_keypoint_orientations(vlSift, angles, &vlSift->keys[i]);
for(int j = 0; j < angleCount; ++j) {
Mat descriptor_array(1, SIFT_DESCRIPTOR_DIM, CV_32FC1);
vl_sift_calc_keypoint_descriptor(vlSift, (vl_sift_pix *) descriptor_array.data, &vlSift->keys[i], angles[j]);
descriptor.addDescriptor(descriptor_array);
}
_feature_descriptors.emplace_back(descriptor);
}
} while (vl_sift_process_next_octave(vlSift) != VL_ERR_EOF);
}
vl_sift_delete(vlSift);
}

23,110

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧