OpenCV 图像像素值统计

489 阅读1分钟
  • 图像像素最大值、最小值以及位置
  • 图像均值、标准差
查找最大值、最小值

API

public static MinMaxLocResult minMaxLoc(Mat src, Mat mask)

参数

参数src:输入的图像矩阵

参数mask:可选的掩码矩阵

返回值 MinMaxLocResult:记录最小值、最大值及其位置

函数要求输入图像必须是单通道,先分离图像通道,再获取

示例

fun findMinMaxLocResult(mat: Mat) {
    val bgrChannels = arrayListOf<Mat>()
    // 分离
    Core.split(mat, bgrChannels)

    var minLoc = Point()
    var maxLoc = Point()
    var minVal = 255.0
    var maxVal = 0.0
    var minCha = 0
    var maxCha = 0
    for (index in 0 until bgrChannels.size) {
        val tmp = Core.minMaxLoc(bgrChannels[index])
        // 最小值
        if (tmp.minVal < minVal) {
            minVal = tmp.minVal
            minLoc = tmp.minLoc
            minCha = index
        }
        // 最大值
        if (tmp.maxVal > maxVal) {
            maxVal = tmp.maxVal
            maxLoc = tmp.maxLoc
            maxCha = index
        }
    }
    val tmp = "最小值 = $minVal, 位于${minCha}通道${minLoc}\n最大值 = $maxVal, 位于${maxCha}通道${maxLoc}\n"
    message += tmp
    for (current in bgrChannels) {
        current.release()
    }
}
获取图像的标准差与方差

概念

  • 均值反映了图像的亮度,均值越大说明图像亮度越大,反之越小;
  • 标准差反映了图像像素值与均值的离散程度,标准差越大说明图像的质量越好。 API
public static void meanStdDev(Mat src, MatOfDouble mean, MatOfDouble stddev, Mat mask)

参数

参数src:输入的图像矩阵

参数mean:输出图像像素均值矩阵

参数stddev:输出的图像像素方差j矩阵

参数mask:可选的掩码矩阵

示例

fun findMeanStdDev(mat: Mat) {
    val mean = MatOfDouble()
    val stdDev = MatOfDouble()
    Core.meanStdDev(mat, mean, stdDev)
    val tmp = "平均值:${mean.toList()}\n方差:${stdDev.toList()}\n"
    message += tmp
    mean.release()
    stdDev.release()
}