OpenCV的特征提取和匹配

点、线的特征提取和匹配都有两个函数:分步求,和一起求:

1. 点:

分两步:detect(), compute()

//-- 初始化
Mat descriptors_1, descriptors_2;
// used in OpenCV3
Ptr<FeatureDetector> detector = ORB::create();
Ptr<DescriptorExtractor> descriptor = ORB::create();
Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("BruteForce-Hamming");

//-- 第一步:检测 Oriented FAST 角点位置
detector->detect(img_1, keypoints_1);
detector->detect(img_2, keypoints_2);

//-- 第二步:根据角点位置计算 BRIEF 描述子
descriptor->compute(img_1, keypoints_1, descriptors_1);
descriptor->compute(img_2, keypoints_2, descriptors_2);

一步:detectAndCompute()

cv::Mat d_srcL, d_srcR;

// 1. definitions
cv::Ptr<cv::ORB> detector = cv::ORB::create();

cv::Ptr<cv::DescriptorMatcher> matcher = cv::DescriptorMatcher::create(cv::NORM_L2);

// 2. detect and compute, match
detector -> detectAndCompute(d_srcL, cv::Mat(), keyPoints_1, d_descriptorsL);
detector -> detectAndCompute(d_srcR, cv::Mat(), keyPoints_2, d_descriptorsR);

2. 线:

两步:

Ptr<LSDDetector> lsd = LSDDetector::createLSDDetector();

/* detect lines */
std::vector<KeyLine> klsd1, klsd2;
Mat lsd_descr1, lsd_descr2;
lsd->detect( imageMat1, klsd1, 2, 2, mask1 );
lsd->detect( imageMat2, klsd2, 2, 2, mask2 );

/* compute descriptors for lines from first octave */
bd->compute( imageMat1, klsd1, lsd_descr1 );
bd->compute( imageMat2, klsd2, lsd_descr2 );

一步:

Ptr<BinaryDescriptor> bd = BinaryDescriptor::createBinaryDescriptor();

// 【1】 提取 line
/** @brief 从金字塔的所有层提取出LSD线,计算LBD描述子。同 lsd->detect + bd->compute
 * useProvidedKeyLines==false: 先提取LSD,再计算描述子
*/
(*bd)(imageMat1, cv::Mat(), keylines1, descr1, false, false);
(*bd)(imageMat2, cv::Mat(), keylines2, descr2, false, false);

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值