比如说我在 opencv 中有一个 size(3,1) Mat 具有预先计算的值(不同的元素值),我想通过首先在头文件中使用 #define 宏定义它来在函数中使用它作为常量。因为它将在一个将被多次调用的函数中。我不想为每个调用初始化矩阵。是否可以在#define 宏中将矩阵定义为全局常量?如何 ?
问问题
468 次
1 回答
0
只要我知道你不能在多次出现的宏之间共享同一个对象(因为宏是由预处理器解析的,它基本上将宏定义的一段代码复制到宏调用的地方),所以我认为你应该坚持使用函数或静态方法。
您可以使用返回对所述 Mat 对象的引用的静态 Mat 对象(使用您的值初始化)定义函数(或静态方法)。可以通过 lambda 函数进行初始化。请参见以下示例:
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
)。它从 lambda 函数的返回值初始化,该函数创建所需的对象,对其进行初始化并返回。这个 lambda 函数只执行一次 - 在静态customMat
对象的初始化期间。
于 2014-09-04T12:25:51.537 回答