main.cpp

#include <istream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;


int main(int argc, char **argv) {
    Mat src, open_dst, close_dst, gradient_dst, top_hat_dst, black_hat_dst, dilate_dst, erode_dst, hit_miss_dst;
    //    加载图片
    src = imread("../../picture/bg1.webp", 1);
    if (!src.data) {
        printf("No image data \n");
        return -1;
    }
    char src_title[] = "src";
    namedWindow(src_title, WINDOW_AUTOSIZE);
    imshow(src_title, src);
    // 形态学开操作
    char open_title[] = "open";
    namedWindow(open_title, WINDOW_AUTOSIZE);
    Mat open_kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
    morphologyEx(src, open_dst, MORPH_OPEN, open_kernel);
    imshow(open_title, open_dst);

    // 形态学关操作
    char close_title[] = "close";
    namedWindow(close_title, WINDOW_AUTOSIZE);
    Mat close_kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
    morphologyEx(src, close_dst, MORPH_CLOSE, close_kernel);
    imshow(close_title, close_dst);

    // 形态学梯度操作
    char gradient_title[] = "gradient";
    namedWindow(gradient_title, WINDOW_AUTOSIZE);
    Mat gradient_kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
    morphologyEx(src, gradient_dst, MORPH_GRADIENT, gradient_kernel);
    imshow(gradient_title, gradient_dst);

    // 形态学顶帽操作
    char top_hat_title[] = "top_hat";
    namedWindow(top_hat_title, WINDOW_AUTOSIZE);
    Mat top_hat_kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
    morphologyEx(src, top_hat_dst, MORPH_TOPHAT, top_hat_kernel);
    imshow(top_hat_title, top_hat_dst);

    // 形态学黑帽操作
    char black_hat_title[] = "black_hat";
    namedWindow(black_hat_title, WINDOW_AUTOSIZE);
    Mat black_hat_kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
    morphologyEx(src, black_hat_dst, MORPH_BLACKHAT, black_hat_kernel);
    imshow(black_hat_title, black_hat_dst);

    // 形态学膨胀操作
    char dilate_title[] = "dilate";
    namedWindow(dilate_title, WINDOW_AUTOSIZE);
    Mat dilate_kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
    morphologyEx(src, dilate_dst, MORPH_DILATE, dilate_kernel);
    imshow(dilate_title, dilate_dst);

    // 形态学腐蚀操作
    char erode_title[] = "erode";
    namedWindow(erode_title, WINDOW_AUTOSIZE);
    Mat erode_kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
    morphologyEx(src, erode_dst, MORPH_ERODE, dilate_kernel);
    imshow(erode_title, erode_dst);

    //    等待按键
    waitKey(0);
    return 0;
}