2010-07-16 88 views
0

因此,我正在使用opencv中的類Mat來編寫我正在編寫的程序。 Mat看起來是這樣的:需要跟蹤opencv Mats的類型

class Mat { 
    public: 
     Mat(int width, int height, int type); 
     template <typename T> T getElt(int x, int y); 
     int depth(); 
     ... 
} 

在構造函數中的類型指定在Mat元素是否float S,int S,等,以及在圖像中的信道數。​​返回用於存儲圖像元素的數據類型。

不幸的是,我必須在我的代碼中調用getElt()。每當我這樣做,我使用switch語句來檢查Mat的深度,所以我可以用適當的模板參數調用getElt()。這樣做是相當冗長的,所以我想知道是否有更好的方法來做到這一點。我可以爲Mat創建一個容器,並使用模板魔法創建一個返回類型而不是值的方法嗎?或者我可以使用宏來使事情更有效和合乎邏輯?

我寧可沒有子類Mat,因爲除了getElt()之外還有幾種方法,對此我有同樣的問題。

編輯:使描述更準確。

+0

如果用「錯誤的」模板參數調用它,會發生什麼?你會得到垃圾還是結果被轉換爲請求的類型?如果後者,你可能總是使用雙重類型? – zvrba 2010-07-16 15:12:00

+0

這是行不通的:文檔說類型必須匹配實際的矩陣類型。 – amc 2010-07-16 15:17:31

回答

0

IIRC在OpenCV中MAT的「類型」對應於圖像類型(即信道數)不是數據類型float/INT /炭等

如果要一個模板圖像類,可以透明地與工作char/int/bool/double等 - 看看CImg

+0

感謝您的建議,但我需要使用opencv提供的其他功能,這將很難寫出自己。 – amc 2010-07-16 15:25:38

+0

我這麼認爲!雖然CImg確實有很多功能 - 如果您需要模板圖像類型,它是最好的圖像庫。 – 2010-07-16 15:37:54

1

您可能正在尋找Mat_<T>來代替。黑色&白色圖像確實與灰度圖像不一樣,並且都不等於彩色圖像。這些應該在編譯時分開。