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

本文介绍了在Android中使用OpenCV进行Mat对象的算数操作,包括加、减、乘、除,并展示了如何通过Scalar调整图像的亮度和对比度。通过函数changeMatLuminance和changeMatContrast实现像素级别的调整,提升图像处理能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。

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

调整图像的亮度和对比度属于像素点操作,一般用下列公式表示

A ′ ( i , j ) = α A ( i , j ) + β A^{'}(i,j)=\alpha A(i,j)+\beta A(i,j)=αA(i,j)+β

其中 α \alpha α为增益放大倍数,用来调整对比度, β \beta β属于偏值,用来控制图像的亮度。

下列为代码实现,其中图像亮度是基于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
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码上夏雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值