2017-03-12 11 views
0

OpenCVのEmgu C#ラッパーを使用して、画像の逆投影のヒストグラムを作成しようとしています。私はEmguのC#に変換しようとしています、次のOpenCVのC++コードを持っている:Emgu - CalcHist _rowRangeエラー

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第一arugment代わりのマットため。

関連する問題