# 找圆方法的总结和比较（三种主要识别方法的比较和融合）

        for (size_t i = 0; i < specialKeypoints.size(); i++)        {            bool isNear = true;            for (size_t j = 0; j < keypoints.size(); j++)            {                double dist = norm(specialKeypoints[i].pt - keypoints[j].pt);                isNear = (dist <= radius * 2.5f);                if (isNear)                {                    break;                }            }            if (isNear)            {                keypoints.push_back(specialKeypoints[i]);            }        }

        std::vector < KeyPoint > resultKeypoints;        for (size_t i = 0; i < keypoints.size(); i++)        {            bool isNew = true;            for (size_t j = 0; j < resultKeypoints.size(); j++)            {                double dist = norm(keypoints[i].pt - resultKeypoints[j].pt);                isNew  =  (dist >= keypoints[i].size/2 && dist >= resultKeypoints[j].size/2);                if (!isNew)                {                    break;                }            }            if (isNew && keypoints[i].size > radius)                resultKeypoints.push_back( keypoints[i]);        }

        // 基于Blob方法进行圆的寻找        SimpleBlobDetector::Params params;        params.filterByColor = false;        params.minThreshold = 0;        params.maxThreshold = 250;        vector<KeyPoint> keypoints;            cv::Ptr<cv::SimpleBlobDetector> detector = cv::SimpleBlobDetector::create(params);        detector->detect(srcNormal, keypoints);        //获得半径        std::vector<double> dists;        double radius;        for (size_t pointIdx = 0; pointIdx  < keypoints.size(); pointIdx++)        {            dists.push_back(keypoints[pointIdx].size);        }        std::sort(dists.begin(), dists.end());        radius = (dists[dists.size() / 2]) / 2.;        //基于HoughCircle方法进行圆的寻找        vector<KeyPoint> tmpKeypoints = findPipMethodHough(srcNormal, radius);        //基于轮廓方法，专门寻找“水泥管”        vector<KeyPoint> specialKeypoints = findConcretePip(srcNormal, radius);

1、树叶测量

2、石材大板

3、中药项目

4、答题卡项目

【想结合算法的设计实现，谈一些务虚的东西】

5.1、算法库的涉及范围广泛，需要进一步挖掘
OpenCV到底有多少算法，那些算法进行了优质实现？这些内容，如果不去进行具体研究，是很难得出明确结论的。这一次在findblob、hough的具体研究中，我发现OpenCV从算法本身、实现方法、实现细节，都是有很多值得深入研究的。

5.2、算法库影响广泛、代码规范，都是将来发展重要依托

5.3、Github的维护方式，是进一步“刻意练习”的重要依托
“可以练习”强调的是focus feed-back fix ，这在Github上面有非常好的体现，一定要寻找真正的专家，并且就普遍关心的问题进行深入的工作，这样才能进入能力提高“正循环”。

posted @ 2020-07-09 18:44  jsxyhelu  阅读(507)  评论(0编辑  收藏  举报