如何检查给定参数是否为 cv::noArray()?

How to check if given parameter is cv::noArray()?

我想实现一个将图像作为可选参数的函数。 如果传递了图像,我想使用它 - 否则我想计算默认值。在 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()

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

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

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

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() 并检查此指针是否有效。

您可以执行以下操作来检查 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
}