zoukankan      html  css  js  c++  java
  • OpenCV 图象腐蚀形态学操作 全家桶

     图象腐蚀与形态学操作 opencv

    1. 通过调用库函数实现图像的腐蚀、膨胀;

    2. 通过设置结构元素、元素大小、形态学操作类型实现对图象的形态学操作。

    源码(VS2017+OpenCV 4.0)

     1 #include <iostream>
     2 #include <opencv2/opencv.hpp>
     3 #include <opencv2/core.hpp>
     4 #include <opencv2/highgui.hpp>
     5 #include <opencv2/imgproc/imgproc.hpp>
     6 #include <opencv2/imgproc/types_c.h>
     7 using namespace std;
     8 using namespace cv;
     9 
    10 //全局变量
    11 Mat src, res;
    12 int slider = 0;//腐蚀膨胀滑杆
    13 const int slider_max = 30;
    14 int operation = 0;//形态学操作类型
    15 const int operation_max = 4;
    16 int kenl = 0;//内核类型
    17 const int kenl_max = 2;
    18 int kenl_size = 1;//内核大小
    19 const int kenl_size_max = 4;
    20 
    21 //回调函数
    22 void on_trackbar(int pos, void*);
    23 //腐蚀
    24 void getErodeAndDilate(int level, int pattern);
    25 
    26 //腐蚀
    27 void getErodeAndDilate(int level, int pattern)
    28 {
    29     //进行腐蚀/膨胀
    30     if(pattern == 0)
    31         erode(src, res, Mat(), Point(-1, -1), level);
    32     else if(pattern == 1)
    33         dilate(src, res, Mat(), Point(-1, -1), level);
    34 
    35     imshow("处理结果1", res);
    36 }
    37 
    38 //回调函数:腐蚀
    39 void on_trackbar1(int pos, void*)
    40 {
    41     getErodeAndDilate(pos, 0);
    42 }
    43 
    44 //回调函数:膨胀
    45 void on_trackbar2(int pos, void*)
    46 {
    47     getErodeAndDilate(pos, 1);
    48 }
    49 
    50 //回调函数:形态学操作类型
    51 void on_trackbar3(int pos, void*)
    52 {
    53     int op = pos + 2;
    54     //选择内核形状
    55     Mat elemment = getStructuringElement(kenl, Size(2 * kenl_size + 1, 2 * kenl_size + 1));
    56 
    57     morphologyEx(src, res, op, elemment);
    58     imshow("处理结果2", res);
    59 }
    60 
    61 int main()
    62 {    
    63     string file = "D:\trashBox\testIMG\monkey.jpg";
    64     src = imread(file);
    65     if (!src.data)
    66     {
    67         cout << "图片读取失败." << endl;
    68         return 0;
    69     }
    70     namedWindow("处理结果1");
    71     //创建选择腐蚀次数的 trackbar
    72     createTrackbar("腐蚀级数", "处理结果1", &slider, slider_max, on_trackbar1);
    73     //创建选择膨胀次数的 trackbar
    74     createTrackbar("膨胀级数", "处理结果1", &slider, slider_max, on_trackbar2);
    75 
    76     namedWindow("处理结果2");
    77     //创建选择具体操作的 trackbar
    78     createTrackbar("形态学操作
    开运算-0
    闭运算-1
    梯度-2
    TopHat-3
    BlackHat-4", "处理结果2", &operation, operation_max, on_trackbar3);
    79     //创建选择内核形状的 trackbar
    80     createTrackbar("结构元素:
     0: Rect - 1: Cross - 2: Ellipse", "处理结果2", &kenl, kenl_max, on_trackbar3);
    81     //创建选择内核大小的 trackbar
    82     createTrackbar("内核大小:
     2n +1", "处理结果2", &kenl_size, kenl_size_max, on_trackbar3);
    83 
    84     waitKey(0);
    85     return 0;
    86 }

    效果图

    1. 图像腐蚀、膨胀

    2. 形态学操作

    其他组合操作,自己去探索吧,挺有趣的!


    更多opencv中文资料,参考这里哟!

  • 相关阅读:
    文件上传-pubsec-文件上传大小限制
    编写 .gitignore 文件
    Git 创建点开头的文件和目录
    Git 克隆远程仓库到本地
    redis 在 windows 中的安装
    查看数据库字符集和排序规则
    centos 6 和centos 7 系统下vnc配置
    centos 6 下KVM 安装学习之旅
    Centos 下使用VLAN+Bridge 搭建KVM基础网络环境
    centos 6 KVM 网卡桥接配置
  • 原文地址:https://www.cnblogs.com/yocichen/p/10870451.html
Copyright © 2011-2022 走看看