簡體   English   中英

OpenCV 3:如何將cv :: Mat作為可選參數傳遞

[英]OpenCV 3: How to pass cv::Mat as an optional argument

我想用C ++編寫一個函數,它將矩陣作為可選參數。 如果用戶在調用函數時最終傳遞矩陣,則函數將對其進行修改,因此我將通過引用實現傳遞。

根據前一個問題的接受答案,可以通過將默認值設為空Mat來完成,例如:

void foo(..., cv::Mat &matrix = cv::Mat()) {
    // code

    return;
}

但是,當我嘗試在OpenCV 3.2中編譯它時,我從“cv :: Mat”類型的右值錯誤中得到了“cv :: Mat&'類型的非const引用的無效初始化”。

自OpenCV 2.4以來,此功能是否已更改,或者該問題可能在其他地方?

我可能錯了,因為我是那些事情的初學者,但這就是我的想法。 你想通過ref傳遞一個可選參數。 問題是帶有符號&的引用是對l值的引用,l值是一個存在的對象。 C ++不允許你寫的東西,因為matrix是一個r值,它是一個沒有與之關聯的實際內存地址的臨時對象。 你可以傳遞cv::Mat &matrix = cv::Mat()的唯一方法就是通過它來構造它, const cv::Mat &matrix = cv::Mat()當然不是你需要的。

最簡單的解決方案IMHO只是重載您的函數定義,以便您擁有

void foo(...args); void foo(...args, cv::Mat &matrix);

希望能幫助到你

這是因為C ++不允許使用rvalue初始化非const引用。

所以你可以:

1)使參考const - 不適合你,因為你想改變函數中矩陣的內容

要么

2)在模塊中全局存儲cv::Mat init變量:

static const cv::Mat g_mat = cv::Mat();

void foo(..., cv::Mat &matrix = g_mat) {

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM