【OpenCV学习】第7课:形态学操作-膨胀与腐蚀

仅自学做笔记用,后续有错误会更改

理论

  1. 图像形态学操作-基于形状的一系列图像处理操作的合集, 主要是基于集合论基础上的形态学数学
  2. 形态学有4个基本操作:膨胀丶腐蚀丶开丶闭
  3. 膨胀与腐蚀是图像处理中最常用的形态学操作手段

形态学操作(morphology operators)-膨胀
跟前边的卷积操作类似, 但是膨胀的操作是在核内所有像素值, 取最大的那个来替换中心锚点的值, 并且核的形状可以是矩形丶圆等.
如下图:
【OpenCV学习】第7课:形态学操作-膨胀与腐蚀_第1张图片
核(红黄部分)的形状是矩形, 膨胀的意思就是核覆盖的9个小格子里边, 读取里面的像素值, 并比较大小, 取最大值, 然后替换中心锚点(红色小格子)的像素值

形态学操作(morphology operators)-腐蚀
腐蚀的操作与膨胀相反, 是取核覆盖范围内最小像素值来替换锚点值.

相关API
膨胀: dilate(src, dst, kernel);
腐蚀: erode(src, dst, kernel);

上边的kernel的形状可以由getStructuringElement(int shape, Size ksize, Point anchor)接口创建.
-shape: 指定核的形状(MORPH_RECT\MORPH_CROSS\MORPH_ELLIPSE)
-ksize: 大小
-anchor: 锚点,缺省值是Point(-1,-1),也就是中心

形态学操作常配合TrackBar一起使用, 就是给你一个可拖动的滑块, 滑块变动可更改核的大小, 然后图像的膨胀/腐蚀程度会进行相应变化, 下边给个膨胀的例子, 最上边的滑块就是TrackBar
【OpenCV学习】第7课:形态学操作-膨胀与腐蚀_第2张图片
【OpenCV学习】第7课:形态学操作-膨胀与腐蚀_第3张图片
TrackBar的创建:createTrackbar(const String& trackbarName, const String winName, int* value, int count, Trackbarcallback func, void* userdata=0)
-trackbarName: 滑块控件的名称
-winName: 窗口名称,这个控件显示在哪个窗口上
-value: 滑块初始值
-count: 滑块最大可拖动值
-func: 膨胀/腐蚀操纵的回调函数
-userdata: 这个参数是用户传递给回调函数的数据,用来处理滑块拖动事件。如果使用的第三个参数value是全局变量,完全可以不去管这个userdata参数

代码示例

Mat src,dst;
char OUTPUT_WIN[] = "output image";
int element_size = 3;
int max_size = 30;
void CallBack_Demo(int, void*);
int main(){
	src = imread(...);
	namedWindow(OUTPUT_WIN, CV_WINDOW_AUTOSIZE);
	createTrackbar("Element Size", OUTPUT_WIN, &element_size, max_size, CallBack_Demo);
	CallBack_Demo(0,0);
	waitKey(0);
	return 0;
}
CallBack_Demo(int ,void* ){
	int s = element_size*2 + 1;
	Mat structureElement = getStructuringElement(MORPH_RECT, Size(s,s), Point(-1,-1));
	// 膨胀
	// dilate(src, dst, stuctureElement, Point(-1,-1),1);
	// 腐蚀
	erode(src, dst, stuctureElement);
	imshow(OUTPUT_WIN, dst);
}

你可能感兴趣的:(OpenCV学习,opencv,学习,人工智能)