Java和OpenCV:计算MAT的中位数/平均值/ Stdev值(灰度图像)

问题描述 投票:4回答:2

我有一个图像作为灰度图像使用

Mat m = Highgui.imread(path, Highgui.CV_LOAD_IMAGE_GRAYSCALE);

在Java中,现在我想计算中值,平均值和标准差。我是新手,我根本不知道如何找出计算和东西......尝试了2个小时的googeling,请给我一些关于如何对此进行研究的基本建议。我尝试过像“mean value java opencv”这样的关键字,发现了这个:

http://docs.opencv.org/java/2.4.2/org/opencv/core/Core.html#meanStdDev

我现在这样做:

MatOfDouble mu = new MatOfDouble();
MatOfDouble sigma = new MatOfDouble();
Core.meanStdDev(m, mu, sigma);

但是如何才能将均值/ stdev值作为双重访问?尝试过像

double d = mu.get(0,0)

但是有些不对劲。不幸的是,我不能通过阅读OpenCV Java文档找到它,因为我不知道该找什么/ at。

我需要mean / stdev来计算canny过滤器的阈值...至今提前感谢

java opencv image-processing mat
2个回答
8
投票

试试这个:

double d = mu.get(0,0)[0]

mu.get(0,0)返回一个double[],所以你可以得到第一个元素 - 它相当于C ++版本:

mu.val[0]

希望能帮助到你。


0
投票

这是3通道彩色图像的相应代码。我使用了Lab颜色空间。它也适用于BGR ...

//compute color statistics for the source image
    List<Mat> labsrc = new ArrayList<Mat>(3);
    Core.split(src, labsrc);


    MatOfDouble meansrc= new MatOfDouble();
    MatOfDouble stdsrc= new MatOfDouble();

    Core.meanStdDev(src, meansrc, stdsrc);

    Log.d("meansrc",meansrc.dump() );

    Log.d("meanval1", String.valueOf(meansrc.get(0,0)[0]));
    Log.d("meanval2", String.valueOf(meansrc.get(1,0)[0]));
    Log.d("meanval3", String.valueOf(meansrc.get(2,0)[0]));

    double lMeanSrc = meansrc.get(0,0)[0];
    double aMeanSrc = meansrc.get(1,0)[0];
    double bMeanSrc = meansrc.get(2,0)[0];

    double lStdSrc = stdsrc.get(0,0)[0];
    double aStdSrc = stdsrc.get(1,0)[0];
    double bStdSrc = stdsrc.get(2,0)[0];
© www.soinside.com 2019 - 2024. All rights reserved.