HSV 直方图 bin 等于零

HSV Histogram bins equal zero

我正在尝试使用以下代码创建 HSV 直方图

Mat image = new Mat(file, LoadImageType.Color);
int hBins = 16;
int sBins = 16;
int vBins = 16;
RangeF hRange = new RangeF(0F, 180F); 
RangeF sRange = new RangeF(0f, 255f);
RangeF vRange = new RangeF(0f, 255f);

Image<Bgr, Byte> imageSource = new Image<Bgr, Byte>(image.Bitmap);
Image<Hsv, Byte> imageHsv = imageSource.Convert<Hsv, Byte>(); 

DenseHistogram hist = new DenseHistogram(new int[] { hBins, sBins, vBins }, new RangeF[] { hRange, sRange, vRange });
hist.Calculate<byte>(imageHsv.Split(), false, null); 

问题是,当调用 hist.GetBinValues() 时,所有 bin 的值都是零

逐个通道计算直方图似乎给出了预期的输出:

                Mat image = new Mat(file, LoadImageType.Color);

                int hBins = 16;
                int sBins = 16;
                int vBins = 16;

                RangeF hRange = new RangeF(0F, 180F);
                RangeF sRange = new RangeF(0f, 256f);
                RangeF vRange = new RangeF(0f, 256f);

                var imageSource = image.ToImage<Bgr, Byte>();

                Image<Hsv, Byte> imageHsv = imageSource.Convert<Hsv, Byte>();
                var hsvChannels = imageHsv.Split();

                DenseHistogram hHist = new DenseHistogram(hBins, hRange);
                DenseHistogram sHist = new DenseHistogram(sBins, sRange);
                DenseHistogram vHist = new DenseHistogram(vBins, vRange);

                hHist.Calculate<byte>(new Image<Gray, Byte>[] { hsvChannels[0] }, false, null);
                sHist.Calculate<byte>(new Image<Gray, Byte>[] { hsvChannels[1] }, false, null);
                vHist.Calculate<byte>(new Image<Gray, Byte>[] { hsvChannels[2] }, false, null);

                var hVals = hHist.GetBinValues();
                var sVals = sHist.GetBinValues();
                var vVals = vHist.GetBinValues();.

不过,我无法回答为什么您的方法不起作用。我看到 GetBinValues() returns 一个包含 16 ^ 3 个值的数组,我希望它是 16 * 3 个值。

与此斗争了几天后,我放弃了 EMGU,只使用了来自 C++ 的 OpenCV,这给了我正确的 HSV 容器。