2014-10-18 45 views
4

我正在使用OpenCV和cv::Mat對象,我需要知道我的矩陣爲了將它傳遞給低級C API而佔用的字節數。看來OpenCV的API沒有返回矩陣使用的字節數的方法,而且我只有一個原始的uchar *data公共成員,沒有包含其實際大小的成員。查找cv的字節大小:: Mat

如何找到以字節爲單位的cv::Mat大小?

回答

20

的常見的答案是計算在矩陣元素的總數和由每個元件的尺寸相乘,這樣的:

// Given cv::Mat named mat. 
size_t sizeInBytes = mat.total() * mat.elemSize(); 

這將在常規場景中,其中該矩陣被分配工作作爲內存中的連續塊。

但請考慮系統對矩陣中每行的字節數有對齊限制的情況。在這種情況下,如果mat.cols * mat.elemSize()未正確對齊,mat.isContinuous()false,並且之前的大小計算錯誤,因爲mat.elemSize()將具有相同數量的元素,儘管緩衝區較大!

正確答案,那麼,就是找到字節每個矩陣行的大小,並與行數乘以:

size_t sizeInBytes = mat.step[0] * mat.rows; 

瞭解更多關於stephere

+0

很好解釋!步驟*行方案也可以在連續的情況下工作,不是嗎?但是這是一個問題,您的低級API是否可以處理不連續的圖像。 – Micka 2014-10-18 17:27:57

+0

它也可以在連續的場景中工作,因爲'mat.step [0] == mat.cols * mat.elemsize()'。是的,它可以處理非連續的緩衝區(我正與iOS上的ImageIO一起將圖像直接壓縮到磁盤)。 – StatusReport 2014-10-18 17:41:26