2

同様の質問を見つけました。emgucvc#を使用してヒストグラムを作成
し、グレースケール画像を渡すとうまく機能しますが、Matrixを使用すると、プログラムが例外をスローします。私のコード:

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);

emgudocの宣言は次のとおりです。

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

何が悪いのかわからない:(

4

1 に答える 1

2

あなたが直面している問題は、cvCalcArrHistを呼び出すときに「サポートされていない形式または形式の組み合わせ」をスローするDenseHistogramクラスの制限 あります

このクラスは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クラスの代わりにジェネリックを使用して範囲も指定できるようにする必要があります。

于 2012-08-30T13:44:42.600 に答える