如何使用Java OpenCV庫更改影像的對比度?


增加/減少影像的亮度和對比度可以透過變換影像的畫素來實現。這可以用以下公式表示:

g(i, j) = α . f(i, j)+ β

其中,

  • (i, j) 是畫素的位置。

  • α(增益)和 β(偏差)是變換的引數。

  • 有時增益引數控制影像的對比度,而偏差引數控制影像的亮度。

org.opencv.core.Mat 類的 convertTo() 方法對給定的矩陣執行必要的計算,以更改影像的對比度和亮度。此方法接受 4 個引數:

  • mat - 一個空矩陣,用於儲存與源矩陣大小和型別相同的計算結果。

  • rtype - 指定輸出矩陣型別的整數值。如果此值為負,則型別將與源型別相同。

  • alpha - 增益值,必須大於 0(預設值為 1)。

  • beta - 偏差值(預設值為 0)。

使用 OpenCV Java 庫更改影像的對比度

如前所述,傳遞給此方法的 alpha 值會更改影像的對比度,如果此引數的選擇值小於 1(到 0),則影像的對比度會降低。類似地,如果它大於 1(到 255),則影像的對比度會增加。

要更改影像的對比度:

  • 使用 loadLibrary() 方法載入 OpenCV 本地庫。

  • 使用 imread() 方法讀取所需影像的內容到 Mat 物件。

  • 建立一個與上一步中獲得的矩陣大小和型別相同的空矩陣。

  • 透過傳遞空矩陣、-1(獲取相同型別)、alpha 值以增加或減少對比度(0-1 或 1-100)以及 0 作為 beta 值來呼叫 convertTo() 方法。

  • 使用 Imgcodecs.imwrite() 方法將結果矩陣的內容寫入輸出影像。

示例

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
public class AlteringContrast {
   public static void main (String[] args) {
      //Loading the OpenCV core library
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
      //Reading the Image from the file
      String file ="D:\Images\car3.jpg";
      Mat src = Imgcodecs.imread(file, Imgcodecs.IMREAD_COLOR);
      //Creating an empty matrix
      Mat dest = new Mat(src.rows(), src.cols(), src.type());
      //Increasing the contrast of the image
      src.convertTo(dest, -1, 10, 0);
      // Writing the image
      Imgcodecs.imwrite("D:\Images\altering_contrast_10.jpg", dest);
   }
}

輸入影像

以下是不同 alpha 值的各種輸出影像:

α 值:0.5

 

α 值:0.8 

 α 值:1.5 

 

α 值:2.0 

更新於: 2020年4月9日

944 次檢視

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.