Opencv3 C++ VS2017 学习笔记 08腐蚀膨胀

  • 学习方法总结:
    • 通过视频学习初步了解理论知识点+相关API用法
    • 梳理知识点,从课本中查阅相关数学理论支撑
  • 回调函数:主函数调用回调函数,主函数执行完毕后, 执行回调函数
  • createTrackbar
    • 原型:  createTrackbar(const String& trackbarname, const String& winname,int* value, int count,TrackbarCallback onChange = 0, void* userdata = 0);
    • 实例:  createTrackbar("Element Size", "dst_image", &element_size, max_size,CallBack_Dem);
    • 参数:滑动控件名称,显示在的窗口名称, 初始化阈值(形参指针,故传地址), 控件刻度最大值, 回调函数
      • 回调函数可以理解为一个函数变量
      • 回调函数原型是void (*TrackbarCallback)(int pos, void* userdata);
        • (*TrackbarCallback)为函数void (int pos,void* userdata)的别名
        • 回调函数是专门为滑动控件而产生的,
        • 第一个形参pos,它表示的是当前滑块所在的位置,它的值是createTrackbar()传给他的,就是初始化阈值
  • getStructuringElement
    • 得到一个结构元素, 如何理解???
      • 可以这么理解,之前定义filter\kernel都是先用Mat声明一个对象,然后元素逐个赋值,比较麻烦,这里opencv封装了一个函数,直接指定参数就可以得到一个同样的东西, 只是封装了一下步骤,没有什么优化
      • 用直接修改参数的方法得到一个kernel\filter
      • getStructruingElement(shape, ksize, anchor=None);
        • kernel形状: MORPH_RECT矩形,  MORPH_CORSS交叉形, MORPH_ELLIPSE椭圆形
        • kernel的维度尺寸, (n,n) ,如Size(3,3);
        • 锚点, (-1,-1)为默认值
        •  
  • 膨胀: 求局部最大值的操作
    • 原理:膨胀或者腐蚀操作就是将图像(或图像的一部分区域,我们称之为A)与核(我们称之为B)进行卷积
      • kernel可以是任何形状,它有一个单独定义的参考点, anchor锚点,kernel可以理解成filter掩膜等
      • 而膨胀就是求局部最大值的操作,核B与图形卷积,即计算核B覆盖的区域的像素点的最大值,并把这个最大值赋值给参考点指定的像素.这样就会使图像中的高亮区域逐渐增长
      • 膨胀可以简单理解为将B与A接触的所有背景点合并到A中的过程。
    • API: dilate
      • dilate(src0, dst, structureElement, Point(-1, -1));
      • 参数: 源图像, 结果图, kernel,anchor点(-1,-1为默认)
  • 腐蚀:腐蚀就是求局部最小值的操作。
    • 原理:腐蚀可以理解为B的中心(锚点)沿着A的内边界走了一圈。腐蚀也是对高亮部分而言,A区域之外的部分 < A的高亮像素,所里里面被外面取代。A中能完全包含B的像素被留下来了。
      • ​​​​​​​腐蚀可以简单理解为消除物体A所有边界点的过程。
    • API:erode(src0, dst, structureElement, Point(-1, -1);
#include "pch.h"
#include <iostream>
#include <opencv2/opencv.hpp>
#include <string>

using namespace std;
using namespace cv; 

Mat src0, src1, dst;
int element_size = 3;
int max_size = 21;
void CallBack_Dem(int, void*);

int main(int argc, char ** argv)
{
	src0 = imread("C:\\Users\\xujin\\Desktop\\test0.JPG");
	if (!src0.data)
	{
		cout << "no image";
		return -1;
	}
	namedWindow("src0_image", WINDOW_AUTOSIZE);
	imshow("src0_image", src0);
	namedWindow("dst_image", WINDOW_AUTOSIZE);
	createTrackbar("Element Size", "dst_image", &element_size, max_size,CallBack_Dem);
	//CallBack_Dem(0, 0);

	waitKey(0);
	return 0;
}

void CallBack_Dem(int, void*)
{
	int s = element_size * 2 + 1;
	Mat structureElement = getStructuringElement(MORPH_RECT, Size(s, s), Point(-1, -1));
	dilate(src0, dst, structureElement, Point(-1, -1));
	//erode(src0, dst, structureElement, Point(-1, -1);
	imshow("dst_image", dst);
	return;
}

 

Opencv3 C++ VS2017 学习笔记 08腐蚀膨胀Opencv3 C++ VS2017 学习笔记 08腐蚀膨胀 MillenniumFalcon 发布了11 篇原创文章 · 获赞 2 · 访问量 6985 私信 关注
上一篇:vs2017打包exe安装包


下一篇:推荐的VS2017的编辑背景色和字体