0

我想实现一个将图像作为可选参数的函数。如果传递了图像,我想使用它 - 否则我想计算一个默认值。在 OpenCV 库cv::noArray()中用于此目的。像这样的东西:

void doStuff(cv::InputArray candidatesMap = cv::noArray())
{
    // initialize candidatesMap if not given
    if(candidatesMap is cv::noArray())  // <-- Need help here
    {
        candidatesMap = createCandidatesMap();
    }

    // ... more code using candidatesMap
}

如何以编程方式检查可选参数是否已给出或默认为cv::noArray().

由于我没有找到任何文档,因此它也可能对其他人有帮助。

4

3 回答 3

1

您可以执行以下操作来检查 an 是否cv::InputArray已分配给cv::noArray()

void doStuff(cv::InputOutputArray candidatesMap = cv::noArray())
{
    // initialize candidatesMap if not given
    if(candidatesMap.empty())
    {
        candidatesMap = createCandidatesMap();
    }

    // ... more code using candidatesMap
}
于 2020-02-14T10:37:31.357 回答
0

我检查了cv::noArray()OpenCV 代码中的用法,有这样的东西:

if (&argument == &noArray())
    return "InputArrayOfArrays: noArray()";

在你的情况下,它可能是:

void doStuff(cv::InputArray candidatesMap = cv::noArray())
{
    // initialize candidatesMap if not given
    if(&candidatesMap == &cv::noArray())
    {
        candidatesMap = createCandidatesMap();
    }
    // ... more code using candidatesMap
}

但是即使candidatesMap不等于noArray也不代表这个输入不为空。所以它也值得检查它的大小。

@MichałWalenciak 说这种比较行不通。所以你可以通过其他方式检查它。要检查是否candidatesMap有效,您可以调用candidatesMap.getObj()并检查此指针是否有效。

于 2020-02-13T11:49:42.020 回答
-1

我知道它不能回答您的问题,但是您可以通过编写更简洁的代码来解决您的问题。只写两个函数。一个有参数,一个没有。

于 2020-02-13T11:40:47.307 回答