emgu用矩阵计算直方图

时间:2012-08-30 09:19:22

标签: c# .net emgucv

我发现了一个类似的问题:creating histogram using emgu cv c#
当我通过灰度图像时效果很好,但是当我使用矩阵时,程序会抛出异常。我的代码:

Matrix<double> mat = new Matrix<double>(10, 10);
mat.SetRandUniform(new MCvScalar(0.0), new MCvScalar(20.0));
DenseHistogram histo = new DenseHistogram(5, new RangeF(0.0f, 20.0f));
histo.Calculate(new Matrix<double>[] { mat }, false, null);//<--throws exception here
CvInvoke.cvShowImage("Mat Histogram", histo.GetHistogramImage().Ptr);
CvInvoke.cvWaitKey(0);

并且emgu doc中的声明是:

public void Calculate<TDepth>(
    Matrix<TDepth>[] matrices,
    bool accumulate,
    Matrix<byte> mask
)
where TDepth : new()

我无法弄清楚出了什么问题:(

1 个答案:

答案 0 :(得分:2)

您面临的问题包括 DenseHistogram 类中的限制,当调用 cvCalcArrHist 时会抛出“不支持的格式或格式组合”。

此类仅在float上计算,而不是在double上计算。

Matrix<float> mat = new Matrix<float>(10, 10);
mat.SetRandUniform(new MCvScalar(0.0), new MCvScalar(20.0));
DenseHistogram histo = new DenseHistogram(5, new RangeF (0.0f, 20.0f));
histo.Calculate(new Matrix<float>[] { mat }, false, null); //runs fine :)

更好的设计还应该让用户使用泛型,Range<double>而不是静态RangeF类来指定范围。