opencv-形态处理

时间:2023-03-09 06:40:24
opencv-形态处理

开运算 (Opening)

  • 原理摘自:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/opening_closing_hats/opening_closing_hats.html

  • 开运算是通过先对图像腐蚀再膨胀实现的。

    opencv-形态处理

  • 可以排除小团块物体(如果物体较背景明亮)

  • 请看以下。左图是原图像,右图是採用开运算转换之后的结果图。

    观察发现字母拐弯处的白色空间消失。

  • opencv-形态处理opencv-形态处理

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaF93bHlmdw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

闭运算(Closing)

  • 闭运算是通过先对图像膨胀再腐蚀实现的。

    opencv-形态处理

  • 可以排除小型黑洞(黑色区域)。

    opencv-形态处理

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaF93bHlmdw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">opencv-形态处理

形态梯度(Morphological Gradient)

  • 膨胀图与腐蚀图之差

    opencv-形态处理

  • 可以保留物体的边缘轮廓,例如以下所看到的:

    opencv-形态处理opencv-形态处理

顶帽(Top Hat)

  • 原图像与开运算结果图之差

    opencv-形态处理

    opencv-形态处理opencv-形态处理

黑帽(Black Hat)

  • 闭运算结果图与原图像之差

    opencv-形态处理

    opencv-形态处理opencv-形态处理

  • 代码:
  • // ConsoleApplication3_6_23.cpp : Defines the entry point for the console application.
    // #include "stdafx.h"
    #include<opencv2/opencv.hpp>
    #include<iostream>
    using namespace std;
    using namespace cv; Mat src,dst; int pro_elem = 0;
    int pro_size = 0;
    int pro_operator = 0; const int max_elem = 2;
    const int max_size = 21;
    const int max_operator = 4; char* windowName = "Demo";
    void Image_pro(int,void*); int _tmain(int argc, _TCHAR* argv[])
    {
    src = imread("hwl.jpg");
    if(!src.data)
    return -1; namedWindow(windowName,CV_WINDOW_AUTOSIZE); createTrackbar("Operator:\n 0:opening-1:closing-2:gradient-3:Top Hat-4: Black Hat",
    windowName,&pro_operator,max_operator,Image_pro); createTrackbar("Element:\n 0:Rect-1:Cross-2:Ellipse",
    windowName,&pro_elem,max_elem,Image_pro); createTrackbar("Kernel size:\n 2n+1",
    windowName,&pro_size,max_size,Image_pro); Image_pro(0,0);
    waitKey(0);
    return 0;
    } void Image_pro(int,void*)
    {
    int operation = pro_operator + 2;
    Mat element = getStructuringElement(pro_elem,Size(2*pro_size+1,2*pro_size+1),
    Point(pro_size,pro_size));
    morphologyEx(src,dst,operation,element);
    imshow(windowName,dst);
    }

版权声明:本文博主原创文章。博客,未经同意,不得转载。