[英]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.