opencv(Python/c++):形态学滤波(腐蚀,膨胀;开运算,闭运算,形态学梯度,顶帽,黑帽)

腐蚀是指对高亮部分进行腐蚀,高亮区域更小
膨胀,是指对高亮部分进行膨胀 ,高亮区域更大

开运算,闭运算,形态学梯度,顶帽,黑帽
其中开运算是 先腐蚀后膨胀 ,闭运算先膨胀后腐蚀,形态学梯度:膨胀度与腐蚀图之差,顶帽:原图-开运算;黑帽:闭运算-原图

效果图

在这里插入图片描述最左边腐蚀,中间膨胀,最右边原图

c++版本

1)腐蚀与膨胀
无论是腐蚀和膨胀都需要设定

#include <iostream>
#include <opencv/cv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>

using namespace std;
using namespace cv;

//主函数
int main(void)
{
    //读取原始图像
    Mat srcImage=imread("/home/liuxin/桌面/opencv/dog.jpeg");
    imshow("original",srcImage);
    //获取自定义核
    Mat element,Dilate,Erode;
    element=getStructuringElement(MORPH_RECT,Size(15,15));
    //进行膨胀操作
    dilate(srcImage,Dilate,element);
    erode(srcImage,Erode,element);


    //显示结果
    imshow("Dilate(PengZhang)",Dilate);
    imshow("Erode(FuShi)",Erode);



    while(1)
    {
        int key=cvWaitKey(10);
    if (key==27)
    {
        break;
    }
    }
    return(0);



}

2)开运算,闭运算,形态学梯度,顶帽,黑帽
在这里插入图片描述
这几个可以用一个函数morphologyEX(),改一下标识符就可以了

  • MORPH_OPEN 开运算
  • MORPH_CLOSE 闭运算
  • MORPH_GRADIENT 形态学梯度
  • MORPH_TOPHAT 顶帽
  • MORPH_BLACKHAT 黑帽

源代码

#include <iostream>
#include <opencv/cv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>

using namespace std;
using namespace cv;

//主函数
int main(void)
{
    //读取原始图像
    Mat srcImage=imread("/home/liuxin/桌面/opencv/dog.jpeg");
    imshow("original",srcImage);
    //获取自定义核
    Mat element,open,close,gradient,tophat,blackhat;
    element=getStructuringElement(MORPH_RECT,Size(15,15));
    //进行开,闭,形态学,顶帽,黑帽操作
    morphologyEx(srcImage,open,MORPH_OPEN,element);
    morphologyEx(srcImage,close,MORPH_CLOSE,element);
    morphologyEx(srcImage,gradient,MORPH_GRADIENT,element);
    morphologyEx(srcImage,tophat,MORPH_TOPHAT,element);
    morphologyEx(srcImage,blackhat,MORPH_BLACKHAT,element);


    //显示结果
    imshow("open",open);
    imshow("close",close);
    imshow("gradient",gradient);
    imshow("tophat",tophat);
    imshow("blackhat",blackhat);




    while(1)
    {
        int key=cvWaitKey(10);
    if (key==27)
    {
        break;
    }
    }
    return(0);



}

猜你喜欢

转载自blog.csdn.net/weixin_42755384/article/details/88381842