#define макрос для определения константы Mat в opencv

Например, у меня есть размер (3,1) Mat в opencv с предварительно вычисленными значениями (различными значениями элементов), я хочу использовать его в функции как константу, сначала определив ее с помощью макроса #define в заголовочном файле. Потому что это будет в функции, которая будет вызываться много раз. Я не хочу инициализировать матрицу для каждого вызова. Можно ли определить матрицу как глобальную константу в макросе #define? как ?

0

Решение

Насколько я знаю, вы не можете совместно использовать один и тот же объект между несколькими вхождениями макросов (поскольку макросы разрешаются препроцессором, который в основном копирует фрагмент кода, определенный макросом, на место вызова макроса), поэтому я думаю, что вам следует придерживаться функций или статические методы.

Вы можете определить функцию (или статический метод) со статическим объектом Mat (инициализированным вашими значениями), который возвращает ссылку на указанный объект Mat. Инициализация может быть выполнена с помощью лямбда-функции. Смотрите следующий пример:

const cv::Mat &getCustomConstMat()
{
static cv::Mat customMat(
[]()
->cv::Mat
{
cv::Mat myMat(3,3, CV_8UC1);
myMat.at<uchar>(0,0) = static_cast<uchar>(1);
// here comes the rest of the initialisation
return cv::Mat(myMat);
}()
);
return customMat;
}

В этом примере статический объект customMat инициализируется только один раз (при первом вызове функции getCustomConstMat). Он инициализируется из возвращаемого значения лямбда-функции, которая создает нужный объект, инициализирует его и возвращает. Эта лямбда-функция выполняется только один раз — во время инициализации статического customMat объект.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector