Android OpenCV直方图全为0

时间:2015-12-09 22:48:49

标签: android opencv histogram

我试图根据我拥有的Mat生成直方图。垫的尺寸为524x700,包含0-255的数字。现在,当我尝试运行Imgproc.calcHist时,我返回了尺寸为1x25的垫子。这很好,但直方图中唯一的数据是第一个值,而其余值是0.这有什么理由吗?我的代码如下所示:(* dst的类型为CvType.CV_32FC1

MatOfInt channels = new MatOfInt(0);
Mat hist = new Mat();
MatOfInt mHistSize = new MatOfInt(HISTOGRAMSIZE);
MatOfFloat mRanges = new MatOfFloat(0f, 255f);

Imgproc.calcHist(Arrays.asList(dst), channels, new Mat(), hist, mHistSize, mRanges);

for (int i = 0; i < hist.rows(); i++)
{
    double[] data2 = hist.get(i, 0);
    for (int k = 0; k < data2.length; k++)
    {
        String log = "hist_data:\t" + data2[k];
        Log.d(TAG, log);
    }
}

for循环输出:

hist_data: 222768.0
hist_data: 0.0
hist_data: 0.0
hist_data: 0.0
.
.
.

出现了24 0。

2 个答案:

答案 0 :(得分:0)

如果有一些超出0-255范围的值,就会发生这种情况,基本上这意味着你的大多数值都在第一个bin中,而在频谱的另一侧可能有一个或两个。

尝试获取该图片的最小值和最大值,看看是否是这种情况。

答案 1 :(得分:0)

看起来你的图像范围是(0,1),你计算范围(0,255)的直方图