Я пишу функцию, которая получает данный процентиль изображения (серый). Для этого я хотел использовать calcHist () с UMat, чтобы ускорить мой код. Но во всех отношениях я пытался это сделать - потребовалось гораздо больше времени, когда я использовал UMat (вместо Mat).
Я новичок здесь - любая помощь будет принята с благодарностью.
Вот мой код:
int CalcPercentile(UMat gray, float fPercent)
{
int hSize = 256;
UMat hist;
Mat histMat;
calcHist(vector<UMat>{gray}, vector<int>{0}, UMat(), hist, vector<int>{hSize}, vector<float>{0,255});
int iNumPixels = gray.rows * gray.cols;
float fSumFreqNeeded = (float)iNumPixels * fPercent;
histMat = hist.getMat(ACCESS_READ); // or: hist.copyTo(histMat);
int iSumFreq = 0, iVal;
for (iVal = 0; iVal < iHistSize; iVal++)
{
int iCurrFreq = (int)(histMat.at<float>(iVal));
iSumFreq += iCurrFreq;
if (iSumFreq >= fSumFreqNeeded)
break;
}
return iVal;
}
соответствующая функция с Mat вместо UMat была намного быстрее. (Но мой код использует серое изображение UMat в качестве входных данных - и повторное преобразование в Mat занимает слишком много времени).