形態學操作(morphologyoperators)
- 圖像形態學操作 – 基於形狀的一系列圖像處理操作的合集,主要是基於集合論基礎上的形態學數學
- 形態學有四個基本操作:腐蝕、膨脹、開、閉
- 膨脹與腐蝕是圖像處理中最常用的形態學操作手段
形態學操作-膨脹
-
跟卷積操作類似,假設有圖像A和結構元素B,結構元素B在A上面移動,其中B定義其中心爲錨點,計算B覆蓋下A的最大像素值用來替換錨點的像素,其中B作爲結構體可以是任意形狀
形態學操作-腐蝕 -
腐蝕跟膨脹操作的過程類似,唯一不同的是以最小值替換錨點重疊下圖像的像素值
相關API -
getStructuringElement(int shape, Size ksize, Point anchor)
參數(1): 形狀 (MORPH_RECT \MORPH_CROSS \MORPH_ELLIPSE)
參數(2) :大小
參數(3):錨點 默認是Point(-1, -1)意思就是中心像素 -
dilate(src, dst, kernel) 膨脹
-
erode(src, dst, kernel) 腐蝕
(代碼部分)
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
using namespace std;
Mat src;
int ele_dilate;
int ele_erode;
char dilate_IMAGE[] = "dilate_IMAGE";
char erode_IMAGE[] = "erode_IMAGE";
void CallBack(int, void*);
int main(int argc, char** argv)
{
src = imread("D:/picture/Curry.jpeg");
if (src.empty()) //如果沒有找到圖片
{
printf("could not find picture.....\n");
return -1;
}
namedWindow("input image", CV_WINDOW_AUTOSIZE);
imshow("input image", src);
namedWindow(dilate_IMAGE, CV_WINDOW_AUTOSIZE);
namedWindow(erode_IMAGE, CV_WINDOW_AUTOSIZE);
createTrackbar("Size ", dilate_IMAGE, &ele_dilate, 21, CallBack);
createTrackbar("Size ", erode_IMAGE, &ele_erode, 21, CallBack);
waitKey(0); //等待
return 0;
}
void CallBack(int ,void*)
{
int s1 = ele_dilate * 2 + 1;
int s2 = ele_erode * 2 + 1;
Mat dst;
Mat don;
Mat structure1 = getStructuringElement(MORPH_RECT, Size(s1, s1), Point(-1, -1));
Mat structure2 = getStructuringElement(MORPH_RECT, Size(s2, s2), Point(-1, -1));
dilate(src, dst, structure1); //膨脹
erode(src, don, structure2); //腐蝕
imshow(dilate_IMAGE, dst);
imshow(erode_IMAGE, don);
}
實驗效果