Эмгу — CalcHist _rowRange ошибка

Я пытаюсь создать гистограмму для обратной проекции изображения с помощью оболочки Emgu C # для OpenCV. У меня есть следующий код OpenCV C ++, который я пытаюсь преобразовать в Emgu C #:

char* filename = (char*)"C:\\Images\\items.jpg";
Mat im = imread(filename);
if (im.empty())
return -1;

const int channels[] = { 0, 1, 2 };
const int histSize[] = { 32, 32, 32 };
const float rgbRange[] = { 0, 256 };
const float* ranges[] = { rgbRange, rgbRange, rgbRange };

Mat hist;
Mat im32fc3, backpr32f;

im.convertTo(im32fc3, CV_32FC3);
calcHist(&im32fc3, 1, channels, Mat(), hist, 3, histSize, ranges, true, false);
calcBackProject(&im32fc3, 1, channels, hist, backpr32f, ranges);

Emgu C # преобразование:

string filename = @"C:\Images\items.jpg";
Mat im = CvInvoke.Imread(filename);
if (im.IsEmpty)
{
return -1;
}

int[] channels = { 0, 1, 2 };
int[] histSize = { 32, 32, 32 };
float[] ranges = { 0.0f, 256.0f, 0.0f, 256.0f, 0.0f, 256.0f };

Mat im32fc3 = new Mat();
Mat hist = new Mat();
Mat mask = new Mat();
Mat backpr32f = new Mat();

im.ConvertTo(im32fc3, Emgu.CV.CvEnum.DepthType.Cv32F);
CvInvoke.CalcHist(im32fc3, channels, mask, hist, histSize, ranges, false);
CvInvoke.CalcBackProject(im32fc3, channels, hist, backpr32f, ranges);

Тем не менее, я получаю следующую ошибку в CvInvoke.CalcHist:

OpenCV: 0 <= _rowRange.start && _rowRange.start <= _rowRange.end && _rowRange.end <= m.rows

Любая помощь приветствуется.

0

Решение

У меня такая же проблема. нашел этот кусок кода в решении emgu VS.

        using (Util.VectorOfMat vm = new Util.VectorOfMat())
{
vm.Push(channels[i]);
float[] ranges = new float[] { minVal, maxVal };
CvInvoke.CalcHist(vm, new int[] { 0 }, null, hist, new int[] { numberOfBins }, ranges, false);
}

использование VectorOfMat за 1-й аругмент вместо Мат.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]