2012-03-13 109 views
0

我需要創建一個CV ::墊從一個緩衝區,但我不希望的數據被共享,所以不能使用墊(高度,寬度,類型,數據)構造:操作cv :: Mat的內部緩衝區是否安全?

int data[100]; 
cv::Mat m; 
m.create(10, 10, CV_32SC1); // allocate own buffer for m 
for (size_t i = 0; i < 100; ++i) 
{ 
    reinterpret_cast<int*>(m.data)[i] = data[i]; 
} 

我需要投入內部緩衝區(它總是uchar *),以便能夠直接複製我想要的類型(int在這種情況下)的數據,它似乎工作。但是,我記得文檔首選使用uchar *執行所有操作的方法,即將源緩衝區轉換爲uchar *並使用名爲stepWidth的參數來獲取uchar * -units中的正確偏移量。這樣做是否會遇到麻煩,或者是CV_32SC1類型的Mat的緩衝區,它只是int的緩衝區,並沒有什麼區別?

回答

1

是的,CV ::墊內部緩衝區只是一個數據塊 - 與他們無關,你將(只是不釋放他們!)

唯一的複雜性,多維數組(如圖片)是每個新行不一定直接從最後一行的末尾開始。 行被填充,因此它們總是以32位(64位爲64位構建??)邊界開始 - 所以您需要使用數據(行)。

有一個在cv::Mat文檔

+0

在我的情況下對「外來數據」的話題,在多方面的問題並不適用,所以我想我不必擔心。至於這個話題,我只在該頁面發現了一個'foreign',它適用於共享一個緩衝區的結構。不管怎樣,謝謝! – neuviemeporte 2012-03-14 08:20:18

相關問題