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