Я получаю ошибку неоднозначности в OpenCV, когда пытаюсь вычислить гистограмму и мне было интересно, что я что-то упустил. Я посмотрел на параметры функции и увидел, что для этого потребовалось одно из следующих действий:
void calcHist( const Mat* images, int nimages,
const int* channels, InputArray mask,
OutputArray hist, int dims, const int* histSize,
const float** ranges, bool uniform=true, bool accumulate=false );
void calcHist( const Mat* images, int nimages,
const int* channels, InputArray mask,
SparseMat& hist, int dims,
const int* histSize, const float** ranges,
bool uniform=true, bool accumulate=false );
И в моем коде у меня есть следующее:
if(histMat.size > 0)
{
float hranges[2] = {0, 180};
float* phranges = hranges;
cv::Mat hist;
cv::Mat hsv;
cv::Mat hue;
cv::Mat mask;
cvtColor(histMat, hsv, CV_BGR2HSV);
int _vmin = vmin, _vmax = vmax;
inRange(hsv, cv::Scalar(0, smin, MIN(_vmin,_vmax)),
cv::Scalar(180, 256, MAX(_vmin, _vmax)), mask);
int ch[] = {0, 0};
hue.create(hsv.size(), hsv.depth());
mixChannels(&hsv, 1, &hue, 1, ch, 1);
if(eType == MODEL)
{
cv::Mat roi(hue, selection), maskroi(mask, selection);
cv::calcHist(&roi, 1, 0, maskroi, hist, 1, &hsize, &phranges);
cv::normalize(hist, hist, 0, 255, CV_MINMAX);
trackWindow = selection;
histimg = cv::Scalar::all(0);
int binW = histimg.cols / hsize;
cv::Mat buf(1, hsize, CV_8UC3);
for( int i = 0; i < hsize; i++ )
buf.at<cv::Vec3b>(i) = cv::Vec3b(cv::saturate_cast<uchar>(i*180./hsize), 255, 255);
cvtColor(buf, buf, CV_HSV2BGR);
for( int i = 0; i < hsize; i++ )
{
int val = cv::saturate_cast<int>(hist.at<float>(i)*histimg.rows/255);
cv::rectangle( histimg, cv::Point(i*binW,histimg.rows),
cv::Point((i+1)*binW,histimg.rows - val),
cv::Scalar(buf.at<cv::Vec3b>(i)), -1, 8 );
}
}
}
Я пытаюсь выяснить, что я могу изменить, чтобы этот код компилировался. Также обратите внимание, что этот кусок кода находится в функции для класса. Я пытаюсь разделить большую часть примера кода гистограммы на отдельную функцию, которая вызывается только в определенных точках, поэтому я не уверен, имеет ли это какое-либо отношение к тому факту, что phranges установлен в неподходящем месте или мои переменные установлены неправильно.
Любой совет с благодарностью.
Спасибо