OpenCV  4.10.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选项的外观