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 選項的效果