Java和OpenCV:计算MAT的中值/平均值/标准偏差值(灰色图像)

Java和OpenCV:计算MAT的中值/平均值/标准偏差值(灰色图像),java,opencv,image-processing,mat,Java,Opencv,Image Processing,Mat,我有一个图像作为灰度图像使用 Mat m = Highgui.imread(path, Highgui.CV_LOAD_IMAGE_GRAYSCALE); 在Java中,现在我想计算中值、平均值和标准差。我是新手,我只是不知道如何找出计算和东西。。。尝试了2个小时的谷歌搜索,请给我一些基本的建议如何做这方面的研究。我尝试了“mean value java opencv”等关键词,发现: 我现在这样做: MatOfDouble mu = new MatOfDouble(); MatOfDoub

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

Mat m = Highgui.imread(path, Highgui.CV_LOAD_IMAGE_GRAYSCALE);
在Java中,现在我想计算中值、平均值和标准差。我是新手,我只是不知道如何找出计算和东西。。。尝试了2个小时的谷歌搜索,请给我一些基本的建议如何做这方面的研究。我尝试了“mean value java opencv”等关键词,发现:

我现在这样做:

MatOfDouble mu = new MatOfDouble();
MatOfDouble sigma = new MatOfDouble();
Core.meanStdDev(m, mu, sigma);
但是他妈的如何访问作为double的mean/stdev值呢?尝试过类似的事情

double d = mu.get(0,0)
但是有点不对劲。不幸的是,我自己无法通过阅读OpenCV Java文档找到它,因为我不知道要查找/查看什么

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

试试这个:

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

<代码> MU.GET(0. 0)返回<代码>双倍[]/Cord>,这样您就可以得到第一个元素了,它相当于C++版本:

mu.val[0]

希望有帮助。

这是3通道彩色图像的相应代码。我使用了实验室颜色空间。它也可以与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];
//计算源图像的颜色统计信息
List labsrc=newarraylist(3);
分芯(src、labsrc);
MatOfDouble meansrc=新的MatOfDouble();
MatOfDouble stdsrc=新的MatOfDouble();
Core.meanstdev(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];
双lStdSrc=stdsrc.get(0,0)[0];
双aStdSrc=stdsrc.get(1,0)[0];
双bStdSrc=stdsrc.get(2,0)[0];

双d是中位数吗@Chewxymu通常是meanNote的符号:这只给出灰度图像的准确答案。对于彩色图像,需要取所有通道的平均值。例如,
double totalMu=(mu.get(0,0)[0]+mu.get(1,0)[0]+mu.get(2,0)[0])/3.
工作正常,谢谢,但您不需要前两行,因为从来没有使用过labsrc。