Первый способ копирования предпочтительнее, потому что вы копируете и конвертируете в плавающее в одном направлении, а не записываете обратно в исходную переменную.
Второй способ выполнения арифметики c - ОЧЕНЬ СУПЕР потому что прокатка ваших собственных циклов в OpenCV почти всегда медленнее, чем использование встроенных арифметических c функций, потому что OpenCV скомпилирован для использования векторизации SIMD и многих других форм оптимизации на уровне сборки.
Но оба они неэффективны о распределении памяти (значительное замедление), если вы заранее знаете, каким будет размер ваших кадров, потому что вы постоянно выделяете и освобождаете матрицу с плавающей запятой для преобразования. procFrame
as stati c (static Mat
) и его создание сразу же, как вы делаете, чтобы получить правильный размер.
static Mat procFrame(frame.size(), CV_32FC1);
cv::equalizeHist(frame, frame);
frame.convertTo(procFrame, CV_32FC1);
procFrame = procFrame*(2./ 255.);
procFrame -= 1.;
Если размер вашего кадра изменяется во время выполнения, не объявляйте его as stati c.