Использование openCv calcHist с UMat для вычисления процентиля - PullRequest
0 голосов
/ 09 марта 2020

Я пишу функцию, которая получает данный процентиль изображения (серый). Для этого я хотел использовать 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 занимает слишком много времени).

...