zoukankan      html  css  js  c++  java
  • OpenCV教程(45) harris角的检测(3)

          在前面一篇教程中,我们通过取局部最大值的方法来处理检测结果,但是从图像中可以看到harris角的分布并不均匀,在纹理颜色比较深的地方检测的harris角结果更密集一些。本章中,我们使用一个简单的策略算法,首先在检测的harris角图像中,找到一个值最大的角,后面的最大值角检测至少要和前面的角有一个距离,这样循环查找角,直到得到指定数目的角位置

         在OpenCV中,我们可以通过下面的代码得到结果:

    // Compute good features to track
    std::vector<cv::Point2f> corners;
    cv::goodFeaturesToTrack(image,corners,
        500,    // maximum number of corners to be returned
        0.01,    // quality level
        10);    // minimum allowed distance between points

          500是我们需要的harris角数目,0.01是quality level,用作二值化harris角图像,10是两个harris之间的距离。检测结果放在corners中,我们可以在原图像中,显示这些角,可以看到这些角的分布要均匀很多。

        注意,这个方法默认使用Shi and C方法判断定角。Good Features to Track,1994, J. Shi and C。

        在harris角检测中,我们判断R值的大小,image,但在Shi and C的角检测算法中,我们使用公式image,R小于某个阈值,才会判断给区域存在角。当然在cv::goodFeaturesToTrack中,你也可以指定使用harris方法判定角

    image

    我们也可以使用下面的代码得到相同的结果:

    // vector of keypoints
    std::vector<cv::KeyPoint> keypoints;
    // Construction of the Good Feature to Track detector
    cv::GoodFeaturesToTrackDetector gftt(
        500,   // maximum number of corners to be returned
        0.01,   // quality level
        10);    // minimum allowed distance between points
    // point detection using FeatureDetector method
    gftt.detect(image,keypoints);

    cv::drawKeypoints(image,        // original image
        keypoints,                    // vector of keypoints
        image,                        // the resulting image
        cv::Scalar(255,255,255),    // color of the points
        cv::DrawMatchesFlags::DRAW_OVER_OUTIMG); //drawing flag

    image

    程序代码:参考FirstOpenCV49

    代码下载:http://yunpan.cn/Q4akuTWgAUqqu

  • 相关阅读:
    12.19手动 项目部署
    12.19 redis缓存
    12.19 redis缓存
    用压测模拟并发、并发处理(synchronized,redis分布式锁)
    12.19 异常捕获补充
    app提交版本更新的流程
    变量
    类型转换的判别
    本文档中使用的伪类型
    Callbacks
  • 原文地址:https://www.cnblogs.com/mikewolf2002/p/3547438.html
Copyright © 2011-2022 走看看