当前位置:   article > 正文

openCV3.0 C++ 学习笔记补充(自用 代码+注释)---持续更新 二(51-)

openCV3.0 C++ 学习笔记补充(自用 代码+注释)---持续更新 二(51-)

环境:OpenCV3.2.0 + VS2015

51、Mean-Shift算法分割图像 cv::pyrMeanShiftFiltering()

参考链接:【从零学习OpenCV 4】分割图像——Mean-Shift分割算法

Mean-Shift算法又被称为均值漂移法,是一种基于颜色空间分布(彩色图像的像素值)图像分割算法。该算法的输出是一个经过滤色的“分色”图像,其颜色会变得渐变,并且细纹纹理会变得平缓(颜色分布平滑的图像)。

  1. // pyrMeanShiftFiltering()函数原型
  2. void cv::pyrMeanShiftFiltering(InputArray src, //待分割的输入图像,必须是三通道CU_8U的彩色图像
  3. OutputArray dst, //分割后的输出图像,与输入图像具有相同的尺寸和数据类型
  4. double sp, //滑动窗口的半径
  5. double sr, //滑动窗口颜色幅度
  6. int maxLevel = 1, //分割金字塔缩放层数
  7. TermCriteria termcrit = //迭代算法终止条件
  8. TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 5, 1)
  9. )

TermCriteria变量可以通过TermCriteria()函数进行赋值,函数原型如下:

  1. // TermCriteria()函数原型
  2. cv::TermCriteria::TermCriteria(int type, //终止条件的类型标志,可以选择的参数及含义在表8-6中给出
  3. int maxCount, //最大迭代次数或者元素数
  4. double epsilon //迭代算法停止时需要满足的精度或者参数变化
  5. )

该函数可以表示迭代算法的终止条件,主要分为满足迭代次数和满足计算精度两种。

表8-6 TermCriteria()函数中终止条件的类型标志可选参数及含义
  1. //分割处理
  2. Mat result1, result2;
  3. TermCriteria T10 = TermCriteria(TermCriteria::COUNT|TermCriteria::EPS, 10, 0.1);
  4. pyrMeanShiftFiltering(img, result1, 20, 40, 2, T10); //第一次分割
  5. pyrMeanShiftFiltering(result1, result2, 20, 40, 2, T10); //第一次分割的解雇再次分割
  6. //显示分割结果
  7. imshow("img", img);
  8. imshow("result1", result1);
  9. imshow("result2", result2);
  10. //对图像提取Canny边缘
  11. Mat imgCanny,result1Canny,result2Canny;
  12. Canny(img, imgCanny, 150, 300);
  13. Canny(result1, result1Canny, 150, 300);
  14. Canny(result2, result2Canny, 150, 300);
  15. //显示边缘检测结果
  16. imshow("imgCanny", imgCanny);
  17. imshow("result1Canny", result1Canny);
  18. imshow("result2Canny", result2Canny);

52、

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/775495
推荐阅读
相关标签
  

闽ICP备14008679号