> 文档中心 > OpenCV4.5.5学习笔记(十二):漫水填充,图像金字塔(高斯金字塔,拉普拉斯金字塔和图像尺寸缩放)与阈值化

OpenCV4.5.5学习笔记(十二):漫水填充,图像金字塔(高斯金字塔,拉普拉斯金字塔和图像尺寸缩放)与阈值化


提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、漫水填充
  • 二、图像金字塔(图像尺寸缩放)
    • 1.高斯金字塔
    • 2.拉普拉斯金字塔
    • 3.图像尺寸缩放
  • 三、阈值化
  • 总结

前言

笔者本科时候有幸接触了OpenCV3.2.0版本的学习,后因考研压力不得不暂时停下学习的脚步,现在考研任务结束了,未来的导师也是从事的该方向,笔者又开始了新一轮的学习。回来发现OpenCV已经出到了4.5.5版本,遂重新下载新版本并决定记录这一学习历程。由于笔者水平有限,可能有错误之处还请诸位大佬多多包涵并烦请指出,让我们一起学习,共同进步。
首先需要说明的是:我是按着毛星云前辈编写的OpenCV3编程入门进行学习的,我会尽力把星云前辈的程序转成符合OpenCV4.5.5版本的。毛星云前辈于2021年12月11日不幸过世,他是我非常敬仰的一位业内大佬,我也是看他的书才开始接触OpenCV。


提示:以下是本篇文章正文内容,下面案例可供参考

一、漫水填充

漫水填充法是一种用特定的颜色填充连通区域,通过设置可连通像素的上下限以及联通方式来达到不同的填充效果的方法。基本思想是自动选中了和种子点相连的区域,接着将该区域替换成指定的颜色,经常用来标记和分离图像的一部分进行处理或分析。
类似于ps中“魔棒”的功能。
漫水填充算法使用的是floodFill()函数。
在OpenCV官方文档中是这么写的:
int cv::floodFill (
InputOutputArray image,
InputOutputArray mask,
Point seedPoint,
Scalar newVal,
Rect * rect = 0,
Scalar loDiff = Scalar(),
Scalar upDiff = Scalar(),
int flags = 4
)
函数cv::floodFill从种子点开始用指定的颜色填充一个连通分量。连通性由相邻像素的颜色/亮度接近度决定。像素在(x , y)如果满足以下条件,则认为属于重新绘制的域:

  1. 在灰度图像和浮动范围的情况下
    OpenCV4.5.5学习笔记(十二):漫水填充,图像金字塔(高斯金字塔,拉普拉斯金字塔和图像尺寸缩放)与阈值化

  2. 在灰度图像和固定范围的情况下
    OpenCV4.5.5学习笔记(十二):漫水填充,图像金字塔(高斯金字塔,拉普拉斯金字塔和图像尺寸缩放)与阈值化

  3. 在彩色图像和浮动范围的情况下
    OpenCV4.5.5学习笔记(十二):漫水填充,图像金字塔(高斯金字塔,拉普拉斯金字塔和图像尺寸缩放)与阈值化

  4. 在彩色图像和固定范围的情况下
    OpenCV4.5.5学习笔记(十二):漫水填充,图像金字塔(高斯金字塔,拉普拉斯金字塔和图像尺寸缩放)与阈值化

第一个参数是输入/输出 1 或 3 通道、8 位或浮点图像。它由函数修改,除非在函数的第二个变体中设置了FLOODFILL_MASK_ONLY标志,
第二个参数是操作掩码应为单通道 8 位图像,比图像宽 2 像素,高 2 像素。由于这既是输入参数又是输出参数,因此您必须负责对其进行初始化。填充不能跨越输入掩码中的非零像素,
第三个参数是初始点,
第四个参数是重绘域像素的新值,
第五个参数是当前观察到的像素与其属于该组件的相邻像素之一或添加到该组件的种子像素之间的最大较低亮度/色差,
第六个参数是当前观察到的像素与其属于该组件的相邻像素之一或添加到该组件的种子像素之间的最大上亮度/色差,
第七个参数是由函数设置为重绘域的最小边界矩形的可选输出参数,
第八个参数是操作标志。前 8 位包含连接值


二、图像金字塔(图像尺寸缩放)

通常我们需要将图像转换为与原始大小不同的大小。为此,有两种可能的选择:放大图像(放大)或缩小它(缩小)。
图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构。图像金字塔最初用于机器视觉和图像压缩,一幅图像的金字塔是一系列以金字塔形状排列的,分辨率逐渐降低且来源于同一张原始图的图像的合集。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。
金字塔底部是待处理图像的高分辨率显示,而顶部是低分辨率的近似。
图像金字塔是图像的集合——所有图像都来自单个原始图像——这些图像被连续下采样,直到达到某个所需的停止点。有两种常见的图像金字塔:

  1. 高斯金字塔:用于对图像进行下采样
  2. 拉普拉斯金字塔:用于从金字塔中较低的图像(分辨率较低)重建上采样图像

1.高斯金字塔

高斯金字塔用于降采样。
将金字塔想象成一组层,其中层越高,尺寸越小。
OpenCV4.5.5学习笔记(十二):漫水填充,图像金字塔(高斯金字塔,拉普拉斯金字塔和图像尺寸缩放)与阈值化
使用高斯核卷积:
OpenCV4.5.5学习笔记(十二):漫水填充,图像金字塔(高斯金字塔,拉普拉斯金字塔和图像尺寸缩放)与阈值化
删除每个偶数行和列。
如果我们想让它更大怎么办?:用零填充列。首先,将图像在每个维度上放大到原​​始图像的两倍,新的偶数行和。使用上面显示的相同内核执行卷积(乘以 4)以近似“缺失像素”的值。

2.拉普拉斯金字塔

当我们要从金字塔中较低的图像重构上采样图像时,采用拉普拉斯金字塔。
拉普拉斯金字塔的第i层由下面关系定义:
OpenCV4.5.5学习笔记(十二):漫水填充,图像金字塔(高斯金字塔,拉普拉斯金字塔和图像尺寸缩放)与阈值化
我们也可以用OpenCV直接计算拉普拉斯算子:
OpenCV4.5.5学习笔记(十二):漫水填充,图像金字塔(高斯金字塔,拉普拉斯金字塔和图像尺寸缩放)与阈值化
高斯金字塔与拉普拉斯金字塔如图表示,也显示了从子图像恢复成原始图像的逆过程:
OpenCV4.5.5学习笔记(十二):漫水填充,图像金字塔(高斯金字塔,拉普拉斯金字塔和图像尺寸缩放)与阈值化

3.图像尺寸缩放

能够精确地转换为指定尺寸的目标图像。
我们常用的是resize()函数
在OpenCV官方文档中是这么写的:
void cv::resize (
InputArray src,
OutputArray dst,
Size dsize,
double fx = 0,
double fy = 0,
int interpolation = INTER_LINEAR
)
第一个参数是输入图像,
第二个参数是输出图像;它的大小为 dsize(当它非零时)或从src.size()、fx 和 fy 计算的大小,
第三个参数是输出图像大小,
第四个参数是沿水平轴的比例因子,
第五个参数是沿垂直轴的比例因子,
第六个参数是插值方法


三、阈值化

最简单的分割方法。
应用示例:分离出与我们要分析的对象相对应的图像区域。这种分离基于对象像素和背景像素之间的强度变化。为了将我们感兴趣的像素与其余像素(最终将被拒绝)区分开来,我们将每个像素强度值与阈值(根据要解决的问题确定)进行比较。一旦我们正确地分离了重要的像素,我们可以用确定的值来设置它们来识别它们(即我们可以为它们分配一个值 0(黑色)、255(白色)或任何值适合您的需求)。
OpenCV4.5.5学习笔记(十二):漫水填充,图像金字塔(高斯金字塔,拉普拉斯金字塔和图像尺寸缩放)与阈值化
我们常用的是threshold()函数
在OpenCV官方文档中是这么写的:
double cv::threshold (
InputArray src,
OutputArray dst,
double thresh,
double maxval,
int type
)
第一个参数是输入数组,
第二个参数是与 src 具有相同大小和类型以及相同通道数的输出数组,
第三个参数是阈值,
第四个参数是与THRESH_BINARY和THRESH_BINARY_INV阈值类型一起使用的最大值,
第五个参数是 阈值类型,


总结

这是第六大章的最后一节,主要还是对于图像的各种操作,其中图像分离最为重要,会在日常中经常使用。

OpenCV4.5.5学习笔记(十二):漫水填充,图像金字塔(高斯金字塔,拉普拉斯金字塔和图像尺寸缩放)与阈值化 创作打卡挑战赛 OpenCV4.5.5学习笔记(十二):漫水填充,图像金字塔(高斯金字塔,拉普拉斯金字塔和图像尺寸缩放)与阈值化 赢取流量/现金/CSDN周边激励大奖