OpenCV 4.13.0
开源计算机视觉库 (Open Source Computer Vision)
正在加载...
正在搜索...
未找到匹配项
为图像添加边框

上一篇教程: 制作自己的线性滤波器!
下一篇教程: Sobel 导数

原作者Ana Huamán
兼容性OpenCV >= 3.0

目标

在本教程中,你将学习如何:

  • 使用 OpenCV 函数 copyMakeBorder() 来设置边框(为图像添加额外的填充)。

理论

注意
下面的解释摘自 Bradski 和 Kaehler 的书 Learning OpenCV
  1. 在我们之前的教程中,我们学习了如何使用卷积来操作图像。一个自然而然的问题是如何处理边界。如果被评估的点位于图像边缘,我们该如何对它们进行卷积?
  2. OpenCV 的大多数函数所做的是将给定图像复制到另一个稍大的图像上,然后自动填充边界(通过下面代码示例中解释的任何方法)。这样,卷积就可以在需要的像素上无问题地执行(额外的填充在操作完成后会被裁剪掉)。
  3. 在本教程中,我们将简要探讨定义图像额外填充(边框)的两种方法:

    1. BORDER_CONSTANT:用一个恒定值(例如黑色或 \(0\))填充图像。
    2. BORDER_REPLICATE:原始图像最边缘的行或列会被复制到额外的边框中。

    这在代码部分会更清楚地看到。

  • 这个程序做什么?
    • 加载图像
    • 让用户选择输入图像的填充类型。有两种选项:

      1. 恒定值边框:为整个边框应用恒定值的填充。此值将每 0.5 秒随机更新一次。
      2. 复制边框:边框将从原始图像边缘的像素值复制而来。

      用户通过按 'c'(constant)或 'r'(replicate)来选择其中一个选项。

    • 当用户按下 'ESC' 时,程序结束。

代码

教程代码如下所示。

说明

声明变量

首先,我们声明将要使用的变量。

rng 变量值得特别关注,它是一个随机数生成器。我们将在稍后看到,我们用它来生成随机的边框颜色。

加载图像

和往常一样,我们加载源图像src

创建窗口

在简要介绍了如何使用程序后,我们创建一个窗口。

初始化参数

现在我们初始化定义边框大小的参数(topbottomleftright)。我们将它们的值设置为src大小的 5%。

循环

程序在一个无限循环中运行,直到按下 ESC 键。如果用户按下 'c' 或 'r',borderType 变量将分别取BORDER_CONSTANTBORDER_REPLICATE 的值。

随机颜色

在每次迭代(0.5 秒后),都会更新随机边框颜色(value)...

这个值是一组在 \([0,255]\) 范围内随机选择的三个数字。

在图像周围形成边框

最后,我们调用 copyMakeBorder() 函数来应用相应的填充。

  • 参数是:
    1. src:源图像
    2. dst:目标图像
    3. topbottomleftright:图像每个侧面的边框像素长度。我们将它们定义为原始图像大小的 5%。
    4. borderType:定义应用哪种类型的边框。在此示例中,它可以是恒定值或复制。
    5. value:如果borderTypeBORDER_CONSTANT,则此值为用于填充边框像素的值。

显示结果

我们将输出图像显示在之前创建的图像中。

结果

  1. 编译上述代码后,您可以提供图像路径作为参数来执行它。结果应该是:

    • 默认情况下,它从 BORDER_CONSTANT 边框开始。因此,将显示一系列随机颜色的边框。
    • 如果按下 'r',边框将变成边缘像素的副本。
    • 如果按下 'c',随机颜色的边框将再次出现。
    • 如果按下 'ESC',程序将退出。

    下面是一些截图,展示了边框如何改变颜色以及BORDER_REPLICATE 选项的外观。