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;
}