• Opencv学习(二)形态学操作


    (一)定义结构元素

    可以通过形态学处理,使其变得丰满,或者去除掉多余的像素。

    结构元素可以简单定义为:像素的组合(如下图)

    (二)膨胀和腐蚀

    在形态学中,通常使用二值图像作为输入图像。在二值图像中,习惯用黑色(低像素值)表示背景物体,白色(高像素值)表示前景物体。

    2.1 膨胀

    是取核中(即上面的3x3矩阵中)像素值的最大值代替锚点位置的像素值,这样会使图像中较亮的区域增大,较暗的区域减小。如果是一张黑底,白色前景的二值图,就会使白色的前景物体颜色面积变大,就像膨胀了一样。

    Mat dialated;    //目标图像
    dilate(image, dialated, Mat(),Point(-1,-1),5);
    
    imshow("dialated", dialated);

    2.2 腐蚀

     腐蚀操作类似于中值平滑,也有一个核,但不进行卷积运算,而是取核中像素值的最小值代替锚点位置的像素值,这样就会使图像中较暗的区域面积增大,较亮的的区域面积减小。如果是一张黑底,白色前景的二值图,就会使白色的前景物体颜色变小,就像被腐蚀了一样。

    Mat eroded;//目标图像
    Mat element(4, 4,CV_8U);//核大小
    erode(image, eroded, Mat());
    
    imshow("eroded", eroded);

    2.3 开运算

    先进行腐蚀操作,后进行膨胀操作,主要用来去除一些较亮的部分,即先腐蚀掉不要的部分,再进行膨胀。

    Mat opened;
    morphologyEx(image, opened, MORPH_OPEN, Mat());
    
    imshow("opened", opened);

    2.4 闭运算

    先进行膨胀操作,后进行腐蚀操作,主要用来去除一些较暗的部分

    Mat closed;
    morphologyEx(image, closed, MORPH_CLOSE, element, Point(-1, -1), 5);
    imshow("closed", closed);

    2.5 梯度运算

    膨胀运算结果减去腐蚀运算结果,可以拿到轮廓信息。

    Mat result;
    morphologyEx(image, result, MORPH_GRADIENT, Mat(),Point(-1,-1),5);
    imshow("result", result);

    2.6 顶帽运算

    原始图像减去开运算结果

    即:原始带刺的-不带刺的=刺

    Mat tophat;
    morphologyEx(image,tophat, MORPH_TOPHAT, Mat());
    imshow("tophat", tophat);

    2.7 黑帽运算

    原始输入-闭运算结果

    Mat blackhat;
    morphologyEx(image, blackhat, MORPH_BLACKHAT, Mat());
    imshow("blackhat", blackhat);
    

      

     (三)应用实例

    提取出文字下划线

    void QuickDemo::pengzhanglianxi_demo(Mat& image)
    {
        imshow("image", image);
        Mat img,img_thr,kernel,dst;
        cvtColor(image, img, COLOR_RGB2GRAY);
        threshold(img, img_thr, 127, 255, THRESH_BINARY);
        kernel = getStructuringElement(MORPH_RECT, Size(30, 1));
            //ksize – Size of the structuring element.
            //cols – Width of the structuring element
            //rows – Height of the structuring element
    
        dilate(img_thr, dst, kernel);
        imshow("img_thr", img_thr);
        imshow("dst", dst);
    }

  • 相关阅读:
    leetcode 2 Add Two Numbers
    leetcode1
    二叉树的最大高度和最大宽度
    插入排序
    eventEmitter学习
    用node.js做一个爬虫
    HTLM5 WebSocket权威指南
    (new Function("return " + json))();
    JS中的this变量的使用介绍
    node.js 模块加载原理
  • 原文地址:https://www.cnblogs.com/hongweijiang/p/14876507.html
Copyright © 2020-2023  润新知