如何使用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 次查看

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告