Emgu-CalcHist _rowRange错误 [英] Emgu - CalcHist _rowRange error

查看:161
本文介绍了Emgu-CalcHist _rowRange错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用针对OpenCV的Emgu C#包装器为图像的反投影创建直方图.我有以下OpenCV C ++代码,试图将其转换为Emgu C#:

I'm trying to create a histogram for Back Projection of an image using the Emgu C# wrapper for OpenCV. I have the following OpenCV C++ code which I am trying to convert to 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#转换:

Emgu C# conversion:

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上出现以下错误:

However, I get the following error at CvInvoke.CalcHist:

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

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

感谢您的帮助.

推荐答案

我遇到了同样的问题.在emgu VS解决方案中找到了这段代码.

I had the same problem. found this piece of code in emgu VS solution.

        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 代替第一次使用 Mat .

这篇关于Emgu-CalcHist _rowRange错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆