簡體   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