emgu Вычислить гистограмму с матрицами

Я нашел аналогичный вопрос: создание гистограммы с использованием 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()

не могу понять что не так :(


person Ggicci    schedule 30.08.2012    source источник


Ответы (1)


Проблема, с которой вы столкнулись, заключается в ограничении класса 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.

person Luca Del Tongo    schedule 30.08.2012