形态学对象的提取与屏蔽 (开操作和闭操作)

一、开操作

形态学对象的提取与屏蔽 (开操作和闭操作)_第1张图片

 

代码如下:

 

#include 
#include 
#include 

using namespace cv;
int main(int argc, char** argv) {
    Mat src, dst;
    src = imread("L:opencv_picture/11.png");
    if (!src.data) {
        printf("could not load image...\n");
    }
    namedWindow("input image", CV_WINDOW_AUTOSIZE);
    imshow("input image", src);
    char output_title[] = "morphology demo";
    namedWindow(output_title, CV_WINDOW_AUTOSIZE);

    Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11), Point(-1, -1));
    //getStructuringElement参数:1.形状矩形  2.形态学锚点尺寸  3.默认Point(-1, -1)锚点中心
    morphologyEx(src, dst, CV_MOP_OPEN, kernel);
    //morphologyEx参数:1.输入图像 2.输出图像 3.形态学操作 4.Mat结构元素kernel
    imshow(output_title, dst);

    waitKey(0);
    return 0;
}

 

结果:

形态学对象的提取与屏蔽 (开操作和闭操作)_第2张图片  形态学对象的提取与屏蔽 (开操作和闭操作)_第3张图片

 

 

 

 

二、闭操作

 

 

 形态学对象的提取与屏蔽 (开操作和闭操作)_第4张图片

 

 

 代码入下:

 

#include 
#include 
#include 

using namespace cv;
int main(int argc, char** argv) {
    Mat src, dst;
    //1.
    //src = imread("L:opencv_picture/11.png");
    //2.
    src = imread("L:opencv_picture/12.png");
    if (!src.data) {
        printf("could not load image...\n");
    }
    namedWindow("input image", CV_WINDOW_AUTOSIZE);
    imshow("input image", src);
    char output_title[] = "morphology demo";
    namedWindow(output_title, CV_WINDOW_AUTOSIZE);

    Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11), Point(-1, -1));
    //getStructuringElement参数:1.形状矩形  2.形态学锚点尺寸  3.默认Point(-1, -1)锚点中心
    
    //1.开操作:
    //morphologyEx(src, dst, CV_MOP_OPEN, kernel); 
    //morphologyEx参数:1.输入图像 2.输出图像 3.形态学操作 4.Mat结构元素kernel

    //2.闭操作:
    morphologyEx(src, dst, CV_MOP_CLOSE, kernel);

    imshow(output_title, dst);

    waitKey(0);
    return 0;
}

 

结果:

形态学对象的提取与屏蔽 (开操作和闭操作)_第5张图片      形态学对象的提取与屏蔽 (开操作和闭操作)_第6张图片

 

 

 

 

 

 

 三、形态学梯度

形态学对象的提取与屏蔽 (开操作和闭操作)_第7张图片

 

 

 代码:

 

#include 
#include 
#include 

using namespace cv;
int main(int argc, char** argv) {
    Mat src, dst;
    //1.
    //src = imread("L:opencv_picture/11.png");
    //2.
    //src = imread("L:opencv_picture/12.png");
    //3.
    src = imread("L:opencv_picture/13.jpg");

    if (!src.data) {
        printf("could not load image...\n");
    }
    namedWindow("input image", CV_WINDOW_AUTOSIZE);
    imshow("input image", src);
    char output_title[] = "morphology demo";
    namedWindow(output_title, CV_WINDOW_AUTOSIZE);

    Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11), Point(-1, -1));
    //getStructuringElement参数:1.形状矩形  2.形态学锚点尺寸  3.默认Point(-1, -1)锚点中心
    
    //1.开操作:
    //morphologyEx(src, dst, CV_MOP_OPEN, kernel); 
    //morphologyEx参数:1.输入图像 2.输出图像 3.形态学操作 4.Mat结构元素kernel

    //2.闭操作:
    //morphologyEx(src, dst, CV_MOP_CLOSE, kernel);

    //3.形态学梯度:
    morphologyEx(src, dst,CV_MOP_GRADIENT , kernel);

    imshow(output_title, dst);

    waitKey(0);
    return 0;
}

 

结果:

形态学对象的提取与屏蔽 (开操作和闭操作)_第8张图片    形态学对象的提取与屏蔽 (开操作和闭操作)_第9张图片

 

 

 

 

四、顶帽

形态学对象的提取与屏蔽 (开操作和闭操作)_第10张图片

 

 

 代码如下:

 

#include 
#include 
#include 

using namespace cv;
int main(int argc, char** argv) {
    Mat src, dst;
    //1.
    //src = imread("L:opencv_picture/11.png");
    //2.
    //src = imread("L:opencv_picture/12.png");
    //3.
    //src = imread("L:opencv_picture/13.jpg");
    //4.
    src = imread("L:opencv_picture/11.png");

    if (!src.data) {
        printf("could not load image...\n");
    }
    namedWindow("input image", CV_WINDOW_AUTOSIZE);
    imshow("input image", src);
    char output_title[] = "morphology demo";
    namedWindow(output_title, CV_WINDOW_AUTOSIZE);

    Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11), Point(-1, -1));
    //getStructuringElement参数:1.形状矩形  2.形态学锚点尺寸  3.默认Point(-1, -1)锚点中心
    
    //1.开操作:
    //morphologyEx(src, dst, CV_MOP_OPEN, kernel); 
    //morphologyEx参数:1.输入图像 2.输出图像 3.形态学操作 4.Mat结构元素kernel

    //2.闭操作:
    //morphologyEx(src, dst, CV_MOP_CLOSE, kernel);

    //3.形态学梯度:
    //morphologyEx(src, dst,CV_MOP_GRADIENT , kernel);

    //4.顶帽:
    morphologyEx(src, dst,CV_MOP_TOPHAT , kernel);
    imshow(output_title, dst);

    waitKey(0);
    return 0;
}

 

 

 

结果:

形态学对象的提取与屏蔽 (开操作和闭操作)_第11张图片

 

 

 

 

 

 

 

五、黑帽

形态学对象的提取与屏蔽 (开操作和闭操作)_第12张图片

 

 

 

 

 代码如下:

 

#include 
#include 
#include 

using namespace cv;
int main(int argc, char** argv) {
    Mat src, dst;
    //1.
    //src = imread("L:opencv_picture/11.png");
    //2.
    //src = imread("L:opencv_picture/12.png");
    //3.
    //src = imread("L:opencv_picture/13.jpg");
    //4. 
    //src = imread("L:opencv_picture/11.png");
    //5.
    src = imread("L:opencv_picture/12.png");


    if (!src.data) {
        printf("could not load image...\n");
    }
    namedWindow("input image", CV_WINDOW_AUTOSIZE);
    imshow("input image", src);
    char output_title[] = "morphology demo";
    namedWindow(output_title, CV_WINDOW_AUTOSIZE);

    Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11), Point(-1, -1));
    //getStructuringElement参数:1.形状矩形  2.形态学锚点尺寸  3.默认Point(-1, -1)锚点中心
    
    //1.开操作:
    //morphologyEx(src, dst, CV_MOP_OPEN, kernel); 
    //morphologyEx参数:1.输入图像 2.输出图像 3.形态学操作 4.Mat结构元素kernel

    //2.闭操作:
    //morphologyEx(src, dst, CV_MOP_CLOSE, kernel);

    //3.形态学梯度:
    //morphologyEx(src, dst,CV_MOP_GRADIENT , kernel);

    //4.顶帽:
    //morphologyEx(src, dst,CV_MOP_TOPHAT , kernel);

    //5.黑帽:
    morphologyEx(src, dst,CV_MOP_BLACKHAT , kernel);

    imshow(output_title, dst);

    waitKey(0);
    return 0;
}

 

 

 

 

 

 

原图:                        闭操作图:

形态学对象的提取与屏蔽 (开操作和闭操作)_第13张图片           形态学对象的提取与屏蔽 (开操作和闭操作)_第14张图片

 

 

 

 

 

 黑帽为两图之差:

形态学对象的提取与屏蔽 (开操作和闭操作)_第15张图片

 

 

 

 

 

 

你可能感兴趣的:(形态学对象的提取与屏蔽 (开操作和闭操作))