OpenCV - 新增邊框



本章將教你如何在影像上新增邊框。

copyMakeBorder() 方法

您可以使用名為 Core 類中的 copyMakeBorder() 方法向影像新增各種邊框,該類屬於 org.opencv.core. 包。以下是此方法的語法。

copyMakeBorder(src, dst, top, bottom, left, right, borderType)

此方法接受以下引數:

  • src - 表示源(輸入)影像的 Mat 類物件。

  • dst - 表示目標(輸出)影像的 Mat 類物件。

  • top - 一個整數型別變數,表示影像頂部邊框的長度。

  • bottom - 一個整數型別變數,表示影像底部邊框的長度。

  • left - 一個整數型別變數,表示影像左側邊框的長度。

  • right - 一個整數型別變數,表示影像右側邊框的長度。

  • borderType - 一個整數型別變數,表示要使用的邊框型別。

示例

以下程式是一個示例,演示瞭如何向給定影像新增邊框。

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;

public class AddingBorder {
   public static void main( String[] args ) {
      // Loading the OpenCV core library
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
     
      // Reading the Image from the file and storing it in to a Matrix object
      String file ="E:/OpenCV/chap15/input.jpg";
      Mat src = Imgcodecs.imread(file);

      // Creating an empty matrix to store the result
      Mat dst = new Mat();
   
      Core.copyMakeBorder(src, dst, 20, 20, 20, 20, Core.BORDER_CONSTANT);
      Imgcodecs.imwrite("E:/OpenCV/chap15/border_constant.jpg", dst);

      System.out.println("Image Processed");
   }
}

假設以上程式中指定了以下輸入影像 thresh_input.jpg

Thresh Input

輸出

執行程式後,您將獲得以下輸出:

Image Processed

如果開啟指定的路徑,您可以觀察到輸出影像如下:

Adding Borders Output

其他型別的邊框

除了前面示例中演示的 BORDER_CONSTANT 邊框型別之外,OpenCV 還提供了各種其他型別的邊框。所有這些型別都由 Core 類的預定義靜態欄位(固定值)表示。

您可以透過將相應的預定義值傳遞給 copyMakeBorder() 方法的 borderType 引數來選擇所需的閾值操作型別。

Core.copyMakeBorder(src, dst, 20, 20, 20, 20, Core.BORDER_CONSTANT);

以下是表示各種型別邊框操作及其相應輸出的值。

操作和描述 輸出
BORDER_CONSTANT BORDER_CONSTANT
BORDER_ISOLATED BORDER_ISOLATED
BORDER_DEFAULT BORDER_DEFAULT
BORDER_REFLECT BORDER_REFLECT
BORDER_REFLECT_101 BORDER_REFLECT_101
BORDER_REFLECT101 BORDER_REFLECT101
BORDER_REPLICATE BORDER_REPLICATE
BORDER_WRAP BORDER_WRAP
廣告