opencv 膨脹腐蝕及形態學操作相關API

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

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章