我发现了一个类似的问题: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()
我无法弄清楚出了什么问题:(
答案 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
类来指定范围。