• Qt-OpenCV学习笔记--图像的腐蚀--erode()


    概述

    通过一个特定的结构元素 腐蚀 一个图像。

    • 图像腐蚀的过程类似于一个卷积的过程,源图像矩阵A以及结构元素B,B在A矩阵上依次移动,每个位置上B所覆盖元素的最小值替换B的中心位置值(即锚点处),完成整个腐蚀的过程。
    • 算法通俗理解:其运算过程就是使用用3X3的结构元素,扫描二值图像的每一个像素,用结构元素与其覆盖的二值图像做“与”运算,如果都为1,结构图像的该像素为1,否则为0。结果就是使二值图像减小一圈。
    • 函数支持就地模式,腐蚀操作可以迭加使用多次,在多通道图像的情况下,每个通道独立处理。

    函数

    1. void cv::erode
    2. (
    3. InputArray src,
    4. OutputArray dst,
    5. InputArray kernel,
    6. Point anchor = Point(-1,-1),
    7. int iterations = 1,
    8. int borderType = BORDER_CONSTANT,
    9. const Scalar & borderValue = morphologyDefaultBorderValue()
    10. )
    src源图像
    dst输出图像
    kernel

    用于腐蚀的结构元素

     ● 如果元素=Mat(),则使用3 x 3矩形结构元素。

     ● 可以使用getStructuringElement创建内核。

    anchor

    锚点在元素内的位置(默认值(-1,-1)表示锚位于元素中心。)

    iterations腐蚀操作的迭代次数
    borderType图像边框扩展模式(可查阅BorderTypes,但不支持BORDER_WRAP)
    borderValue恒定边界的边界值

    测试代码

    1. #include "widget.h"
    2. #include "ui_widget.h"
    3. #include <opencv2/core/core.hpp>
    4. #include <opencv2/highgui/highgui.hpp>
    5. #include <opencv2/imgproc/imgproc.hpp>
    6. using namespace cv;
    7. Widget::Widget(QWidget *parent)
    8. : QWidget(parent)
    9. , ui(new Ui::Widget)
    10. {
    11. ui->setupUi(this);
    12. //载入图像
    13. Mat src = imread("c:/opencv/star.jpg");
    14. //显示
    15. imshow("src",src);
    16. //自定义核
    17. Mat element = getStructuringElement(MORPH_ELLIPSE,Size(5,5));
    18. //输出对象
    19. Mat dst;
    20. //腐蚀
    21. erode(src,dst,element);
    22. //显示
    23. imshow("dst",dst);
    24. }
    25. Widget::~Widget()
    26. {
    27. delete ui;
    28. }

    测试结果

    如图所示,星星 尖锐 了许多。

    参考

    OpenCV图像腐蚀函数erode()的使用

    OpenCV-腐蚀cv::erode

  • 相关阅读:
    力扣 136. 只出现一次的数字
    C语言实现《扫雷》
    Linux C 线程间同步机制
    水溶性CuInS/ZnS 量子点 PL 550 nm--800 nm
    BFS:845. 八数码
    35岁以后还能学软件测试吗?
    好用的5款火狐浏览器必备插件,每一款都很实用
    windows环境下PHP7.4多线程设置
    【建议收藏】Go语言关键知识点总结
    uniapp-vue3 项目初始化集成配置【开箱即用】
  • 原文地址:https://blog.csdn.net/ssismm/article/details/127793761