滤波【线性;非线性】 - [含义:不能损坏图像的轮廓以边缘等重要信息;使图像清晰视觉效果好]
平滑滤波: 功能:一类是模糊;另一类是消除噪音
平滑分两种:
·线性滤波 :高斯噪音处理比较好,噪音的值不是很大【如果处理散粒噪音只是让它变得柔和】
·非线性滤波 :散粒噪音处理比较好,噪音值很大,很孤立
- 方框滤波:BoxBlur
结论:像素点变大,意味着图像模糊了
- 均值滤波:Blur
其实是方框滤波的归一化处理【归一化例子:归一化为20x80像素的图像,即经切割后的特征块图像若尺寸不为20x80像素,就把它们统一归一化为 20x80像素】
结论:模糊效果比较好,原理是局部求均值起到模糊。缺点:如果局部有高频噪音,就会对局部像素影响较大;如上带雪花的图像
- 高斯滤波:GaussianBlur
和前两种算法的区别;通过一个掩膜mask遍历图像中每个像素进行卷积然后替代它
结论:相对于前两中平滑,高斯平滑更能保留细节,处理后的像素值更加接近原像素
- 中值滤波:medianBlur
含义:用领域的中值取替代遍历到的像素
结论:避开了大量的散粒噪音
- 双边滤波:bilateralFilter
/*
参三:像素领域的直径
参四:在像素领域中,这个值越大混合的颜色就越宽广
参五:数值越大意味着越远的像素会互相影响
*/
bilateralFilter(srcImg, g_sourceImg, 20, 70, 10);
结论:双边滤波在去除散粒噪音的同时还能保留边缘细节信息。而这个时候我们的中值滤波的效果则还带模糊。
形态学滤波【平滑作用;且不改变面积】 腐蚀-erode;膨胀-dilate;开闭运算;顶帽;黑帽;形态学梯度
含义介绍
- 腐蚀:突出图像暗的区域;侵蚀亮的区域
- 膨胀:突出图像亮的区域;侵蚀暗的区域
- 开运算:先腐蚀后膨胀;将原图小型亮处的部分排除
- 闭运算:先膨胀后腐蚀;将原图小型暗处部分排除
- 顶帽:原图像矩阵减去开运算,得到轮廓边缘更亮细节
- 黑帽:闭运算减去原图像矩阵,得到轮廓边缘更暗细节(为什么不是闭-原;因为越暗的像素值越小,越亮的像素值越大)
- 形态学梯度:膨胀图减去腐蚀图的差:突出边缘轮廓
- 形态学滤波使用
morphologyEx
函数,传入不同的枚举值来执行以上6种算法
- 形态学滤波使用
/** morphologyEx 枚举值
-MORPH_ERODE 腐蚀
-MORPH_DILATE 膨胀
-MORPH_OPEN 开运算
-MORPH_CLOSE 闭运算
-MORPH_GRADIENT 形态学梯度
-MORPH_TOPHAT 顶帽
-MORPH_BLACKHAT 黑帽
*/
int w_h = 3;//传进来的数 先转成int整型变量
/**
参二:内核尺寸
参三:锚点 默认是 (-1,-1),为中心
*/
Mat element = getStructuringElement(MORPH_RECT, cv::Size(w_h * 2 +1,w_h *2 +1),cv::Point(w_h,w_h));
morphologyEx(g_sourceImg, dstImg, type, element);
漫水填充floodFill 含义:用特定的颜色填充连通区域,效果和photoshop魔术棒类似;用处:用来标记或分离图像的一部分;用来制作掩膜
注意:漫水填充设置的g_maskImage必须是比原图的size大出2,也只能是2,cv::size(g_sourceImg.rows + 2, g_sourceImg.cols + 2)
//g_maskImage 掩膜
g_maskImage.create(g_sourceImg.rows + 2, g_sourceImg.cols + 2, CV_8UC1);
g_maskImage = Scalar::all(0);
cv::Rect ccomp;//定义重绘制区域的最小边界矩形区域
//阈值处理
threshold(g_maskImage, g_maskImage, 1, 128, THRESH_BINARY);
/*漫水填充
参二:掩膜
参三:seek选择点,也就是鼠标点击触碰要填充的点
参四:newVal 填充的颜色
参五:cv::Rect**类型 ,重绘区域的最小边界矩形
参六:和观察点颜色负差最大值
参七:和观察点颜色正差最大值
*/
floodFill(dst, g_maskImage, seed, newVal,&ccomp,Scalar(LowDifference,LowDifference,LowDifference),Scalar(UpDifference,UpDifference,UpDifference));
图像金字塔reSize 含义:对图像大小进行调整
- 两种大小变换方式
resize(g_sourceImg, g_dstImg, cv::Size(),size.width,size.height,INTER_LINEAR); // 按照比例缩放
resize(g_sourceImg, g_dstImg, g_dstImg.size(),INTER_LINEAR);//按照固定cv::size缩放
阈值化:threshold 概念:THRESH_BINARY模式 设定阈值大于遍历的像素时设置255,小于阈值设置为0;用处:常常作为掩膜
注意:输入的原图需要是单通道,深度为8或32位