Opencv學習筆記(九) -------膨脹腐蝕

形態學操作(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);
}

實驗效果
在這裏插入圖片描述

發佈了12 篇原創文章 · 獲贊 10 · 訪問量 553
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章