• 水平竖直线及矩形方式提取结构


    结构化膨胀:通过自定义提取兴趣的结构,在该结构覆盖下的最大值作为该取值。

     结构化腐蚀:通过自定义提取兴趣的结构,在该结构覆盖下的最小值作为该取值。

     

    一、水平直线提取

    代码如下:

    #include <opencv2/opencv.hpp>
    #include <iostream>
    
    using namespace cv;
    int main(int argc, char** argv) {
        Mat src, dst;
        src = imread("L:/opencv_picture/14.png");
        if (!src.data) {
            printf("could not load image...
    ");
            return -1;
        }
    
        char INPUT_WIN[] = "input image";
        char OUTPUT_WIN[] = "result image";
        namedWindow(INPUT_WIN, CV_WINDOW_AUTOSIZE);
        imshow(INPUT_WIN, src);
    
        Mat gray_src;
        cvtColor(src, gray_src, CV_BGR2GRAY);
        imshow("gray image", gray_src);
    
        Mat binImg;
        adaptiveThreshold(~gray_src, binImg, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);
        //adaptiveThreshold参数:1.原图  2.生成图像  3.二值图像最大值 4.自适应方法 5.阈值类型  6.块大小 7.常量
    
        imshow("binary image", binImg);
    
        // 水平结构元素
        Mat hline = getStructuringElement(MORPH_RECT, Size(src.cols / 16, 1), Point(-1, -1));
        // 垂直结构元素
        Mat vline = getStructuringElement(MORPH_RECT, Size(1, src.rows / 16), Point(-1, -1));
        // 矩形结构
        Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
    
        Mat temp;
        erode(binImg, temp, hline);
        dilate(temp, dst, hline);
        // morphologyEx(binImg, dst, CV_MOP_OPEN, vline);
        bitwise_not(dst, dst);
        //blur(dst, dst, Size(3, 3), Point(-1, -1));
        imshow("Final Result", dst);
    
        waitKey(0);
        return 0;
    }

    结果:

    二、竖直线提取

    仅提取参数代码改变:

    #include <opencv2/opencv.hpp>
    #include <iostream>
    
    using namespace cv;
    int main(int argc, char** argv) {
        Mat src, dst;
        src = imread("L:/opencv_picture/14.png");
        if (!src.data) {
            printf("could not load image...
    ");
            return -1;
        }
    
        char INPUT_WIN[] = "input image";
        char OUTPUT_WIN[] = "result image";
        namedWindow(INPUT_WIN, CV_WINDOW_AUTOSIZE);
        imshow(INPUT_WIN, src);
    
        Mat gray_src;
        cvtColor(src, gray_src, CV_BGR2GRAY);
        imshow("gray image", gray_src);
    
        Mat binImg;
        adaptiveThreshold(~gray_src, binImg, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);
        //adaptiveThreshold参数:1.原图  2.生成图像  3.二值图像最大值 4.自适应方法 5.阈值类型  6.块大小 7.常量
    
        imshow("binary image", binImg);
    
        // 水平结构元素
        Mat hline = getStructuringElement(MORPH_RECT, Size(src.cols / 16, 1), Point(-1, -1));
        // 垂直结构元素
        Mat vline = getStructuringElement(MORPH_RECT, Size(1, src.rows / 16), Point(-1, -1));
        // 矩形结构
        Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
    
        Mat temp;
        erode(binImg, temp, vline);
        dilate(temp, dst, vline);
        // morphologyEx(binImg, dst, CV_MOP_OPEN, vline);
        bitwise_not(dst, dst);
        //blur(dst, dst, Size(3, 3), Point(-1, -1));
        imshow("Final Result", dst);
    
        waitKey(0);
        return 0;
    }

    结果:

    三、矩形提取

    代码:

    #include <opencv2/opencv.hpp>
    #include <iostream>
    
    using namespace cv;
    int main(int argc, char** argv) {
        Mat src, dst;
        src = imread("L:/opencv_picture/15.bmp");
        if (!src.data) {
            printf("could not load image...
    ");
            return -1;
        }
    
        char INPUT_WIN[] = "input image";
        char OUTPUT_WIN[] = "result image";
        namedWindow(INPUT_WIN, CV_WINDOW_AUTOSIZE);
        imshow(INPUT_WIN, src);
    
        Mat gray_src;
        cvtColor(src, gray_src, CV_BGR2GRAY);
        imshow("gray image", gray_src);
    
        Mat binImg;
        adaptiveThreshold(~gray_src, binImg, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);
        //adaptiveThreshold参数:1.原图  2.生成图像  3.二值图像最大值 4.自适应方法 5.阈值类型  6.块大小 7.常量
    
        imshow("binary image", binImg);
    
        // 水平结构元素
        Mat hline = getStructuringElement(MORPH_RECT, Size(src.cols / 16, 1), Point(-1, -1));
        // 垂直结构元素
        Mat vline = getStructuringElement(MORPH_RECT, Size(1, src.rows / 16), Point(-1, -1));
        // 矩形结构
        Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
    
        Mat temp;
        erode(binImg, temp, kernel);
        dilate(temp, dst, kernel);
        // morphologyEx(binImg, dst, CV_MOP_OPEN, vline);
        bitwise_not(dst, dst);
        //blur(dst, dst, Size(3, 3), Point(-1, -1));
        imshow("Final Result", dst);
    
        waitKey(0);
        return 0;
    }

  • 相关阅读:
    【转载】为什么我的网站加www是打不开的呢
    【转载】IIS网站配置不带www域名直接跳转带www的域名
    【转载】IIS网站如何同时解析带www和不带www的域名
    【转载】C#中将字符串分割成字符数组
    Android面试,简要介绍一下asynctask和handler的优缺点
    Android面试题(2)
    Android面试题(1)
    Android -- 与WEB交互在同一个会话Session中通信
    25匹马的角逐
    Android -- 检测耳机插入状态
  • 原文地址:https://www.cnblogs.com/Jack-Elvis/p/11506733.html
Copyright © 2020-2023  润新知