我使用
将图像作为灰度图像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过滤器的阈值... 到目前为止,提前感谢
答案 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];