Opencv3从头开始(五)形态学操作之膨胀、腐蚀、开闭运算

腐蚀和膨胀是对高亮部分而言,对黑白图像效果更好一些,所以我们第一步让仓老师变成黑白的。
图像二值化

    //二值化
    cvtColor(image,image_gray,COLOR_BGR2GRAY);
    threshold(image_gray,image_thre,125,255,THRESH_BINARY);
    imshow("仓老师",image);
    imshow("仓老师黑白",image_thre);


腐蚀

    //内核,可选矩形MORPH_RECT、交叉形MORPH_CROSS、椭圆MORPH_ELLIPSE
    Mat element=getStructuringElement(MORPH_ELLIPSE,Size(5,5),Point(-1,-1));
    //腐蚀
    Mat image_erode;
    erode(image_thre,image_erode,element);
    imshow("腐蚀",image_erode);


膨胀

//膨胀
    Mat image_dilate;
    dilate(image_thre,image_dilate,element);
    imshow("膨胀",image_dilate);


开操作

 //开
    Mat image_open;
    morphologyEx(image_thre,image_open,MORPH_OPEN,element);
    imshow("开",image_open);


闭操作

//闭
    Mat image_close;
    morphologyEx(image_thre,image_close,MORPH_CLOSE,element);
    imshow("闭",image_close);


代码:

/*
形态学操作初步
腐蚀、膨胀、开操作、闭操作
*/


#include<opencv2/opencv.hpp>
#include<opencv2/imgproc.hpp>
#include<opencv2/imgcodecs.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>

using namespace std;
using namespace cv;

int main(int argc, char* argv[]){
    Mat image=imread("仓老师.jpg");
    Mat image_gray,image_thre;

    //二值化
    cvtColor(image,image_gray,COLOR_BGR2GRAY);
    threshold(image_gray,image_thre,125,255,THRESH_BINARY);


    imshow("仓老师",image_thre);
    //内核,可选矩形MORPH_RECT、交叉形MORPH_CROSS、椭圆MORPH_ELLIPSE
    Mat element=getStructuringElement(MORPH_ELLIPSE,Size(5,5),Point(-1,-1));
    //腐蚀
    Mat image_erode;
    erode(image_thre,image_erode,element);
    imshow("腐蚀",image_erode);
    //膨胀
    Mat image_dilate;
    dilate(image_thre,image_dilate,element);
    imshow("膨胀",image_dilate);
    //开
    Mat image_open;
    morphologyEx(image_thre,image_open,MORPH_OPEN,element);
    imshow("开",image_open);
    //闭
    Mat image_close;
    morphologyEx(image_thre,image_close,MORPH_CLOSE,element);
    imshow("闭",image_close);

    waitKey(0);
    return 0;
}