Android OpenCV之算数操作与调整图像的亮度和对比度
Posted 码上夏雨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
对象。此时 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。
图像的对比度主要是用来描述图像颜色颜色与亮度之间的差异感知,对比度越大,图像的每个像素与周围的差异性也就越大,反之亦然。
调整图像的亮度和对比度属于像素点操作,一般用下列公式表示
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
以上是关于Android OpenCV之算数操作与调整图像的亮度和对比度的主要内容,如果未能解决你的问题,请参考以下文章
Python 计算机视觉—— OpenCV进行图像算数与逻辑运算
opencv4opencv视频教程 C++ 7手动调整图像亮度与对比度 g(i, j) = αf(i, j) + β(点操作与邻域操作概念)