2017-03-12 5 views
0

OpenCV 용 Emgu 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); 

, 나는 다음과 같은 얻을 오류 :

나는 Emgu C 번호로 변환하려고 다음 OpenCV의 C++ 코드를

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

사용 1 arugment 대신 매트에 대한 VectorOfMat.