2

我发现了一个类似的问题:使用 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()

我不知道出了什么问题:(

4

1 回答 1

2

您面临的问题在于 DenseHistogram类中的一个限制,即在调用cvCalcArrHist时 会抛出“不支持的格式或格式组合”。

这个类只计算浮点数而不是双精度数。

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类来指定范围。

于 2012-08-30T13:44:42.600 回答