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


    一、开操作

    代码如下:

    #include <opencv2/opencv.hpp>
    #include <iostream>
    #include <math.h>
    
    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...
    ");
        }
        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;
    }

    结果:

      

     

    二、闭操作

     

     代码入下:

    #include <opencv2/opencv.hpp>
    #include <iostream>
    #include <math.h>
    
    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...
    ");
        }
        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;
    }

    结果:

          

     三、形态学梯度

     代码:

    #include <opencv2/opencv.hpp>
    #include <iostream>
    #include <math.h>
    
    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...
    ");
        }
        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;
    }

    结果:

        

    四、顶帽

     代码如下:

    #include <opencv2/opencv.hpp>
    #include <iostream>
    #include <math.h>
    
    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...
    ");
        }
        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;
    }

    结果:

    五、黑帽

     代码如下:

    #include <opencv2/opencv.hpp>
    #include <iostream>
    #include <math.h>
    
    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...
    ");
        }
        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;
    }

    原图:                        闭操作图:

               

     黑帽为两图之差:

     

  • 相关阅读:
    【spring data jpa】jpa中criteria拼接in查询
    【spring boot】spring boot中使用@RestController不起作用,不返回json,依旧去找访问接口的请求地址对应的页面
    【mysql】mysql查询 A表B表 1对多 统计A表对应B表中如果有对应,则返回true否则false作为A表查询结果返回
    【redis】spring boot中 使用redis hash 操作 --- 之 使用redis实现库存的并发有序操作
    【多线程】java多线程Completablefuture 详解【在spring cloud微服务之间调用,防止接口超时的应用】【未完成】
    【docker】docker network常用命令参数
    【mysql】二级索引----聚簇索引和非聚簇索引-----
    【mysql】mysql统计查询count的效率优化问题
    SpringUtils
    idea激活
  • 原文地址:https://www.cnblogs.com/Jack-Elvis/p/11505680.html
Copyright © 2020-2023  润新知