#include<iostream>
#include"opencv2/opencv.hpp"
#include<cmath>
//膨脹腐蝕 消除小的噪聲塊 與背景和前景色有關
//膨脹:用最大像素的替換中心像素
using namespace std;
using namespace cv;
void CallBack_Dome(int, void*);
char OUTPUT_WIN[] = "out img";
Mat src ,dst;
int element_size = 3;
int max_size = 21;
int main()
{
src = imread("C:/Users/admin/Desktop/1.JPG");
if (!src.data)
{
printf("can not img");
return -1;
}
namedWindow("input img", WINDOW_AUTOSIZE);
imshow("input img", src);
namedWindow(OUTPUT_WIN, WINDOW_AUTOSIZE);
//element_size大小 max_size最大值
createTrackbar("Element size:", OUTPUT_WIN, &element_size, max_size, CallBack_Dome);
CallBack_Dome(0, 0);
waitKey(0);
return 0;
}
void CallBack_Dome(int,void*)
{
int s = element_size * 2 + 1;//必須爲奇數
//structuringElement 結構元素 Size(s, s)結構元素大小
Mat structuringElement = getStructuringElement(MORPH_RECT, Size(s, s), Point(-1, -1));//Point(-1, -1)中心錨點
//dilate(src, dst, structuringElement, Point(-1, -1), 1);//膨脹
erode(src, dst, structuringElement);//腐蝕
imshow(OUTPUT_WIN, dst);
return;
}
/*開、閉操作/
#include<iostream>
#include"opencv2/opencv.hpp"
#include<cmath>
//圖像形態學 在二值圖像和灰度圖像用到的多
using namespace std;
using namespace cv;
int main()
{
Mat dst;
Mat src = imread("C:/Users/admin/Desktop/1.JPG");
if (!src.data)
{
printf("can not img");
return -1;
}
namedWindow("input img", WINDOW_AUTOSIZE);
imshow("input img", src);
char tit[] = "morphological dome";
namedWindow(tit, WINDOW_AUTOSIZE);
Mat kernel= getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));//獲得結構元素
//morphologyEx(src, dst, CV_MOP_OPEN, kernel);//開操作 先腐蝕後膨脹
//morphologyEx(src, dst, CV_MOP_CLOSE, kernel);//閉操作 先膨脹後腐蝕
//morphologyEx(src, dst, CV_MOP_GRADIENT, kernel);//形態學梯度 膨脹減去腐蝕
//morphologyEx(src, dst, CV_MOP_TOPHAT, kernel);//頂帽 原圖像與開圖像之間差值
//morphologyEx(src, dst, CV_MOP_BLACKHAT, kernel);//黑帽 閉操作圖像與原圖像的差值圖像
imshow(tit, dst);
waitKey(0);
return 0;
}