繁体   English   中英

如何检查给定参数是否为 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()

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

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

我已经检查了 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()并检查该指针是否有效。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM