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 对象。此时 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

以上是关于Android OpenCV之算数操作与调整图像的亮度和对比度的主要内容,如果未能解决你的问题,请参考以下文章

Python OpenCV2:OpenCV 图像算数操作

Python 计算机视觉—— OpenCV进行图像算数与逻辑运算

OpenCV 调整图像亮度与对比度

OpenCV 调整图像亮度与对比度

opencv4opencv视频教程 C++ 7手动调整图像亮度与对比度 g(i, j) = αf(i, j) + β(点操作与邻域操作概念)

Android studio 之 OpenCv库安装与Opencv图像灰度化测试(2023-2-13日)