2017-03-12 83 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#轉換:在CvInvoke.CalcHist

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

不過,我得到以下錯誤:

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 arugment而不是