opencv形态学操作,膨胀与腐蚀

先膨胀再腐蚀消除裂痕:

 代码:

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
using namespace std;

//dst是膨胀后的图像,dst2是腐蚀后的图像
Mat src, dst,dst2;
//膨胀的卷积核
int element_size = 3;
//腐蚀的卷积核
int element_size2 = 3;
int max_size = 21;

char* OUTPUT_WIN = "output image";

//膨胀操作
void CallBackDilate(int, void*)
{
    int s = element_size * 2 + 1;
    Mat structureElement = getStructuringElement(MORPH_RECT, Size(s, s), Point(-1, -1));
    dilate(src, dst, structureElement, Point(-1, -1));
    imshow(OUTPUT_WIN, dst);
}

//腐蚀操作
void CallBackErode(int, void*)
{
    int s = element_size * 2 + 1;
    Mat structureElement = getStructuringElement(MORPH_RECT, Size(s, s), Point(-1, -1));
    erode(dst, dst2, structureElement, Point(-1, -1));
    imshow(OUTPUT_WIN, dst2);
}


int main()
{
    //原图
    src = imread(".//pic//1.png",IMREAD_UNCHANGED);
    
    namedWindow("input image", CV_WINDOW_AUTOSIZE);
    imshow("input image", src);

    namedWindow(OUTPUT_WIN, CV_WINDOW_AUTOSIZE);
    createTrackbar("膨胀卷积核大小:", OUTPUT_WIN, &element_size, max_size, CallBackDilate);
    createTrackbar("腐蚀卷积核大小:", OUTPUT_WIN, &element_size2, max_size, CallBackErode);
    CallBackDilate(0, 0);

    waitKey(0);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/xiaochi/p/12000825.html