Android OpenCV之算数操作与调整图像的亮度和对比度

Android OpenCV之算数操作与调整图像的亮度和对比度

OpenCV算数API介绍

Mat对象之间最常见的加减乘除方法如下:

add(Mat src1, Mat src2, Mat dst)
subtract(Mat src1, Mat src2, Mat dst)
multiply(Mat src1, Mat src2, Mat dst)
divide(Mat src1, Mat src2, Mat dst)

其中,src1代表输入的第一个Mat对象,src2代表输入的第二个Mat对象,dst代表算术输出的Mat对象。这时,src1src2的大小和类型必须相同。

当然,src2也可以是Scalar类型。此时,表示图像的每个像素与Scalar中的每个向量完成指定的算术运算。

add(Mat src1, Scalar src2, Mat dst)
subtract(Mat src1, Scalar src2, Mat dst)
multiply(Mat src1, Scalar src2, Mat dst)
divide(Mat src1, Scalar src2, Mat dst)

调整图像的亮度和对比度

图像的亮度和对比度是图像的两个基本属性,对RGB色彩图像来说,亮度越高,像素点对应的RGB应该越大,越接近255,反之亮度越低,像素点对应的RGB应该越小,越接近0。

图像的对比度主要用来描述对图像颜色和亮度差异的感知。对比度越大,图像的每个像素与其周围环境的差异就越大,反之亦然。

调整图像的亮度和对比度是一种像素运算,一般用以下公式表示

Android OpenCV之算数操作与调整图像的亮度和对比度

其中,Android OpenCV之算数操作与调整图像的亮度和对比度为增益放大倍率,用于调节对比度,Android OpenCV之算数操作与调整图像的亮度和对比度属于偏置值,用于控制图像的亮度。

下列为代码实现,其中图像亮度是基于add操作实现的,对比度是基于multiply操作实现的。

import org.opencv.core.Core
import org.opencv.core.Mat
import org.opencv.core.Scalar

/**
 * 改变图像亮度
 *
 * @param srcMat Mat数据源
 * @param luminanceParams 亮度参数,小于0降低亮度,大于0增加亮度
 * @return 调整对比度后的图像
 */
fun changeMatLuminance(srcMat:Mat,luminanceParams: Double):Mat{
    val res = Mat()
    Core.add(srcMat, Scalar(luminanceParams,luminanceParams,luminanceParams),res)
    return res
}

/**
 * 改变图像对比度
 *
 * @param srcMat Mat数据源
 * @param contrastParams 对比度参数,小于1降低对比度,大于1增加对比度
 * @return 调整对比度后的图像
 */
fun changeMatContrast(srcMat:Mat,@FloatRange(from = 0.0, to = 3.0) contrastParams: Double):Mat{
    val res = Mat()
    Core.multiply(srcMat, Scalar(contrastParams,contrastParams,contrastParams),res)
    return res
}

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2022年4月12日 上午10:24
下一篇 2022年4月12日 上午10:38

相关推荐