當我在做一個計算機視覺庫時,我想知道什麼是保存圖像數據的理想數據結構。表示圖像矩陣的理想數據結構是什麼?
有人告訴我,做一個std :: vector的疊瓦是非常糟糕的,因爲數據的連續性不能保證,因此一個簡單的更有效。
問題是,矢量的內容必須與色彩空間有關。另外,對於尺寸問題,最好每個通道都有一個無符號的字符,儘管我最好有漂浮物來執行操作。
要處理的色彩空間,我應該增加向量的大小(如三倍它來處理RGB),這樣我就可以訪問數據是這樣的:
data[0] => pixel 1, Red
data[1] => pixel 1, Green
data[2] => pixel 1, Blue
data[3] => pixel 2, Red
data[4] => pixel 2, Green
... etc
或者是它可以有效地做到這一點更多的(比如使用long int或float來將所有通道的值保存爲一個變量),如果是這樣,怎麼辦?我怎麼能使這個泛型來處理1,2,3或4個通道,以便我可以輕鬆地更改色彩空間(相對)?
的問題是不是容器(我使用的是單一的std ::向量的話),但內容本身。
編輯:既然這個問題已經被標記爲主要意見爲基礎的,我會盡量做到清晰。
目前,我在一家std::vector<float>
存儲圖像數據。這裏的問題是我不知道要存儲多少項目(例如,即使在我僅使用一個(灰度)時,處理RGB/HSV的大小是3倍,還是實現了4項結構(RGBA)?)以便在需要時有效更改色彩空間或對矩陣執行操作。由於這意味着要集成到計算機視覺庫中,所以至少在每一幀中至少會發生一次。
我要求的東西高效在我這裏的情況下,這與意見沒有任何關係(或很少)。可以有幾個很好的答案,其中選擇依賴於意見,但這應該是我的呼籲。
'的std :: VECTOR'保證數據連續存儲在內存中。 –
什麼是「最佳」?有很多方法,他們都有自己的優點和缺點。我建議你看看各種開源圖像處理庫,看看它們是如何做到的。你也可能想問自己是否有意義重新發明車輪。 – Piglet
@JesperJuhl對於一個矢量,確實不是數千。在一個3000x3000像素的圖像中,會有3001個矢量,並不是所有的矢量都會被連續存儲。 – Razakhel