簡體   English   中英

為嵌入式系統加載png圖像

[英]Load png image for embedded system

我正在使用tensorRT進行嵌入式深度學習推理C ++項目。 對於我的模型,有必要減去平均圖像。

我使用的api允許我使用rgb圖像的以下數據結構定義均值圖像:

uint8_t *data[DW_MAX_IMAGE_PLANES];       // raw image data 
size_t pitch;                             // pitch of the image in bytes
uint32_t height;                          // height of the image in px
uint32_t width;                           // image width in px
uint32_t planeCount;                      // plane count of the image

到目前為止,我發現了lib LodePNG,對於我認為該任務非常有用。 它只需幾行即可加載png:

// Load file and decode image.
std::vector<unsigned char> image;
unsigned width, height;
unsigned error = lodepng::decode(image, width, height, filename);

現在的問題是如何將std::vector<unsigned char>轉換為uint8_t *[DW_MAX_IMAGE_PLANES]並計算pitch和planeCount值?

當我使用RGB圖像時,DW_MAX_IMAGE_PLANES等於3。

pitchplaneCount的值很簡單。 由於LodePNG的decode默認為bitdepth = 8 ,因此pitch的值(以字節為單位)為1 而且由於圖像是RGB,所以planeCount值為3每個顏色一個平面。

由於您沒有使用Alpha通道,因此您應該讓LodePNG可以直接將其解碼為RGB格式:

unsigned error = lodepng::decode(image, width, height, filename, LCT_RGB);

但是,一旦將圖像解碼為std::vector<unsigned char> ,您將無法直接使用它。 來自LodePNG的解碼數據具有以下格式:

image -> R0, G0, B0, R1, G1, B1, R2, G2, B2, ...

但是您需要以下格式:

data[0] -> R0, R1, R2, ...
data[1] -> G0, G1, G2, ...
data[2] -> B0, B1, B2, ...

如果您受內存限制,則必須重新排列圖像向量中的值(R0, R1, ... Rn, G0, G1, ... Gn, B0, B1, ... Bn)並計算適當的值初始化data數組的指針。

如果有可用的內存,則可以為三個顏色通道的每一個創建單獨的向量。 然后從解碼的image復制數據,並使用指向向量的第一個元素的指針初始化data數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM