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

时间:2014-03-13 20:26:31

标签: java opencv image-processing mat

我使用

将图像作为灰度图像
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);

但是如何以双倍的方式访问mean / stdev值呢?试过像

这样的事情
double d = mu.get(0,0)

但是出了点问题。不幸的是,由于我不知道该找什么,我无法通过阅读OpenCV Java文档找到它。

我需要mean / stdev来计算canny过滤器的阈值... 到目前为止,提前感谢

2 个答案:

答案 0 :(得分:8)

试试这个:

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

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

mu.val[0]

希望它有所帮助。

答案 1 :(得分: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];