OpenCV 4.12.0
开源计算机视觉
加载中...
搜索中...
无匹配项
为您的图像添加边框

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

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

目标

在本教程中,您将学习如何

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

理论

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

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

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

  • 此程序的作用是什么?
    • 加载图像
    • 让用户选择在输入图像中使用哪种填充。有两种选项:

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

      用户可以通过按 'c'(常数)或 'r'(复制)选择其中一个选项

    • 用户按下 '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 选项的效果