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
对象。这时,src1
和src2
的大小和类型必须相同。
当然,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。
图像的对比度主要用来描述对图像颜色和亮度差异的感知。对比度越大,图像的每个像素与其周围环境的差异就越大,反之亦然。
调整图像的亮度和对比度是一种像素运算,一般用以下公式表示
其中,为增益放大倍率,用于调节对比度,属于偏置值,用于控制图像的亮度。
下列为代码实现,其中图像亮度是基于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
}
文章出处登录后可见!
已经登录?立即刷新