簡體   English   中英

結構中2D數組的動態內存分配

[英]Dynamic memory allocation of 2d arrays that are in the struct

我有一個結構,正在圖像中找到行的開頭和結尾,並在單詞,字母等的開頭和結尾找到這些行(實現基本的OCR)。

typedef struct _IMAGE {
    int row; 
    int col; 
    int max_value;
    int **line;
    int **space;
    int **word;
    int **letter;
    int **matrix;//holds the image pixels
} IMAGE;

我想使用動態分配的矩陣更改代碼。 但是由於我不知道會有多少行和單詞,所以我不知道開頭的大小,因此無法進行簡單的動態分配。 您是否建議我在這種情況下使用向量? 如果是這樣,我應該如何使用它?

您在注釋中澄清了2D數組中的列數將是恆定的,而行數可以更改。

因此,可以使用一維向量並通過將(i, j)索引映射到具有以下公式的單個索引來尋址元素: k = i * number_of_columns + j

但是,您說過line數組只有兩列,一列用於該行的開始,另一列用於結束。 這使我認為,擁有一個包含兩個字段(開始,結束)的Line struct / class並將此struct / class的實例放入一個簡單的1D向量中會更方便(尤其是對於語義而言)。

當您設計一個數組時,每個元素根據其位置具有不同的含義,並且元素很少,我認為最好設計一個合適的結構。

最后,由於這是C ++,因此可以通過以下方式聲明結構:

struct X
{
    int a;
    // ...
}

沒有專業的圖像庫可以將圖像數據保存在矩陣中。 您應該簡單地做:

struct Image
{
  int col;
  std::vector<int> matrix;
};

並訪問諸如matrix[x+ col* y]類的像素。 這將是像素數據最快,最易存儲的布局。 或者使用已經存在的圖像結構來避免使用NIH

暫無
暫無

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

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