OpenCV 4.11.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*

创建窗口

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

初始化参数

现在我们初始化定义边界大小的参数(*top*、*bottom*、*left* 和 *right*)。我们给它们一个 *src* 大小 5% 的值。

循环

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

随机颜色

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

此值是随机选择的三个数字,范围在 \[0, 255] 之间。

为图像添加边框

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

  • 参数如下:
    1. src:源图像
    2. dst:目标图像
    3. top, bottom, left, right:图像各边边框的像素长度。我们将其定义为图像原始大小的 5%。
    4. borderType:定义应用何种类型的边框。在本例中可以是常量或复制。
    5. value:如果 borderTypeBORDER_CONSTANT,则这是用于填充边框像素的值。

显示结果

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

结果

  1. 编译上面的代码后,您可以执行它,并传入图像的路径作为参数。结果应该是:

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

    下面是一些屏幕截图,显示边框颜色如何变化以及 BORDER_REPLICATE 选项的外观。