我试图根据我拥有的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。
答案 0 :(得分:0)
如果有一些超出0-255范围的值,就会发生这种情况,基本上这意味着你的大多数值都在第一个bin中,而在频谱的另一侧可能有一个或两个。
尝试获取该图片的最小值和最大值,看看是否是这种情况。
答案 1 :(得分:0)
看起来你的图像范围是(0,1),你计算范围(0,255)的直方图