![](/img/trans.png)
[英]Initialize two 2D arrays and fill the first column and first row of one of the arrays with 0 along with Dynamic memory allocation
[英]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.